Matplotlib लाइन प्लॉट में Error Bar कैसे जोड़ें?
मेरे पास निम्नलिखित डेटासेट हैं जिनका उपयोग मैं एक लाइन प्लॉट करने के लिए करता हूं। कथानक को meanडेटा से प्राप्त मूल्यों के रूप में प्राप्त किया जाता है । मैं इस भूखंड में त्रुटि सलाखों को जोड़ना चाहता हूं जो मानक विचलन दिखाएगा। मैं अलग जवाब करने के लिए ध्यान दिया है लेकिन उनमें से ज्यादातर में वे परिभाषित किया था xऔर yस्पष्ट रूप से, लेकिन यहाँ मैं dataframe से सीधे साजिश की गणना। इस प्लॉट में एरर बार कैसे जोड़ें?
डेटाफ्रेम डीएफ
UserId | date |-7|-6|-5|-4|-3|-2|-1|0 |1 |2 |3 |4 |5 |6 |7
1 2009-10-17 17:38:32.590 |0 |0 |0 |0 |0 |0 |1 |0 |1 |0 |0 |0 |0 |0 |0
2 2009-10-19 00:37:23.067 |0 |0 |0 |0 |0 |1 |1 |0 |1 |0 |0 |0 |0 |0 |0
3 2009-10-20 08:37:14.143 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0
4 2009-10-21 18:07:51.247 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0
5 2009-10-22 21:25:24.483 |0 |0 |0 |0 |0 |0 |1 |0 |0 |0 |0 |0 |0 |0 |0
कोड
badges = ["A", "B", "C"]
for badge in badges:
res.iloc[:,2:].mean().plot(kind='line', label = badge)
उत्पादन
EDIT (मानक विचलन के साथ केवल एक ग्राफ के लिए प्लॉट)
res.iloc[:,2:].mean().plot(kind='line', label = 'A')
plt.errorbar(x = res.columns.values[:-1], y = res.iloc[:,2:].mean(),yerr = res.iloc[:,2:].std())
इस कोड को निष्पादित करने से निम्नलिखित त्रुटि उत्पन्न होती है:
TypeError: 'value' must be an instance of str or bytes, not a int
जवाब
यदि आप लूप में अपनी लाइनें और त्रुटि बार बनाना चाहते हैं, तो आप लूप के plt.errorbar()अंदर सामान्य का उपयोग कर सकते हैं , लेकिन seabornयदि आप अपने डेटा को उचित प्रारूप में प्राप्त कर सकते हैं, तो इसका उपयोग करना बहुत आसान है।
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.concat([
pd.DataFrame(np.random.randint(0,2, (5, 14))).assign(badge="A"),
pd.DataFrame(np.random.randint(0,2, (5, 14))).assign(badge="B"),
])
plt.figure(figsize=(10, 5))
badges = ["A", "B"]
colors = ["teal", "firebrick"]
for i, badge in enumerate(badges):
sub_df = df[df["badge"]==badge]
sub_df.iloc[:,:-1].mean().plot(kind='line', label=badge, color=colors[i])
plt.errorbar(
sub_df.columns.values[:-1] + (i*0.1), # offset the second error bar a bit
sub_df.iloc[:,:-1].mean(),
yerr=sub_df.iloc[:,:-1].std(),
fmt='|', ecolor='grey', elinewidth=1
);