Chr*_* T. 4 matplotlib histogram bar-chart boxplot pandas
我想将四个时间序列的均值绘制到具有置信区间的Matplotlib条形图中。我也想给它们涂上不同的颜色,以生成这样的条形图
所以我写了下面的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(12345)
df = pd.DataFrame([np.random.normal(-10, 200, 100),
np.random.normal(42, 150, 100),
np.random.normal(0, 120, 100),
np.random.normal(-5, 57, 100)],
index=[2012, 2013, 2014, 2015])
years = ('2012', '2013', '2014', '2015')
y_pos = np.arange(len(years))
df1_mean = df.iloc[0].mean()
df1_std = df.iloc[0].std()
df2_mean = df.iloc[1].mean()
df2_std = df.iloc[1].std()
df3_mean = df.iloc[2].mean()
df3_std = df.iloc[2].std()
df4_mean = df.iloc[3].mean()
df4_std = df.iloc[3].std()
value = (df1_mean, df2_mean, df3_mean, df4_mean)
Std = (df1_std, df2_std, df3_std, df4_std)
plt.bar(y_pos, value, yerr=Std, align='center', alpha=0.5)
plt.xticks(y_pos, years)
plt.ylabel('Stock price')
plt.title('Something')
plt.show()Run Code Online (Sandbox Code Playgroud)
这给了我(见上文)。不完全是我的期望。同样,它看起来像是箱形图,而不是条形图,其中每个样本均应一直向下到x轴。
我承认我对Matplotlib真的很陌生,但是我真的很想知道我的代码发生了什么。这应该是一个简单的任务,但我似乎无法理解。我应该改为调用.subplots()命令吗?最重要的是,如果有人足够友善地指出如何(1)在同一条形图的x轴上添加一条水平线(例如,值为100)作为阈值,我将非常感激,和(2)对这四个条进行不同的着色(选择的确切颜色并不重要)?
谢谢。
默认情况下,plt.bar开始于的条形图y=0。对于正值,它们向上扩展;对于负值,它们向下扩展。
您可以使用bottom参数使它们以不同的值开头,然后将的数量添加bottom到这些值。这是在以下代码中完成的,在该代码中,我还将数据框设置为更常用的形状(年份为列)。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(12345)
df = pd.DataFrame(np.c_[np.random.normal(-10,200,100),
np.random.normal(42,150,100),
np.random.normal(0,120,100),
np.random.normal(-5,57,100)],
columns=[2012,2013,2014,2015])
value = df.mean()
std = df.std()
colors=["red", "green", "blue", "purple"]
plt.axhline(y=100, zorder=0)
plt.bar(range(len(df.columns)), value+np.abs(df.values.min()), bottom=df.values.min(),
yerr=std, align='center', alpha=0.5, color=colors)
plt.xticks(range(len(df.columns)), df.columns)
plt.ylabel('Stock price')
plt.title('Something')
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9629 次 |
| 最近记录: |