मेरे पास एक डेटाफ्रेम है जो इस तरह दिखता है:

            Value   Std         Reciever type
Station ID                                   
ABMF        3.588 0.492         TRIMBLE NETR9
AIRA        8.820 0.256         TRIMBLE NETR9
AREG        7.306 0.356         TRIMBLE NETR9
BRST        6.712 0.166         TRIMBLE NETR9
BRUX        3.151 0.151        SEPT POLARX4TR
          ...   ...                   ...
WTZR       12.374 0.158    LEICA GRX1200+GNSS
WTZZ        1.906 0.179  JAVAD TRE_G3TH DELTA
WUH2        4.422 0.534  JAVAD TRE_G3TH DELTA
ZIM2       11.244 0.171         TRIMBLE NETR5
ZIM3       11.971 0.185         TRIMBLE NETR9

[80 rows x 3 columns]

और मैं इस तरह के एकत्रीकरण के आधार पर विज़ुअलाइज़ेशन बनाने की कोशिश कर रहा हूं:

df = (df.groupby(by=['Station ID'])
              .agg({'Value': np.average, 'Std': np.average, 'Reciever type': 'first'})
              )
            dcb_plot = plt.figure(figsize=(16,9))
            plt.title('Receiver Code Biases for {} station(s) ({})'.format(station, year))
            plt.xlabel('Station(s)')
            plt.ylabel('DCB in ns')
            plt.errorbar(df.index, df['Value'], yerr=df['Std'], marker='o', fmt='o', ms=5, capsize=5, elinewidth=1)  
            ax = plt.gca()
            ax.axes.xaxis.set_ticklabels([])
            ax.yaxis.set_minor_locator(AutoMinorLocator())
            ax.tick_params(which='major', length=8)
            ax.tick_params(which='minor', length=4, color='r')

अभी मैंने कुछ इस तरह हासिल किया है: यहां छवि विवरण दर्ज करें

और मैं Reciever type कॉलम के अंदर मूल्यों के आधार पर कॉलोर्मैप बनाना चाहता हूं (रंगीन एररबार भी अच्छे होंगे)। मैं वह कैसे कर सकता हूं? बेहतर समझ के लिए, यह मेरा वांछित आउटपुट है: यहां छवि विवरण दर्ज करें

2
Mateusz Piskorski 23 सितंबर 2020, 12:15

1 उत्तर

सबसे बढ़िया उत्तर

कुंजी रंग रूप कोलोरमैप उत्पन्न करना है। मैं यहां df का उपयोग नहीं करता, लेकिन आपके डेटा को अनुकूलित करना बहुत आसान होना चाहिए।

from sklearn.datasets import make_blobs
import numpy as np
import matplotlib.pyplot as plt

n_samples = 100
random_state = 170
X, y = make_blobs(n_samples=n_samples, random_state=random_state, centers=3)
names = {0:'a', 1:'b', 2:'c'}
all_names = np.array([names[e] for e in y])
n = len(np.unique(all_names))
# this is how your map colors
colors = plt.cm.Spectral(np.arange(n)/np.arange(n).max())

fig, ax = plt.subplots(1, 1, figsize=(7.2, 7.2))
for i, e in enumerate(np.unique(all_names)):
    mask = all_names == e
    ax.errorbar(X[:, 0][mask], X[:, 1][mask], yerr=0.5, marker='o', fmt='o', ms=5, capsize=5, elinewidth=1, label=e, c=colors[i])
ax.legend()

enter image description here

0
ted930511 23 सितंबर 2020, 11:44