python - 条形图上的自定义 xticks 标签(matplotlib)
问题描述
我试图在条形图上绘制平均值的 95% 置信区间。条形颜色是根据水平线值设置的。因此,如果条形绝对高于此值(给定置信区间),则条形为红色,如果绝对低于此值,则为蓝色,如果包含此值,则为白色。
完成的绘图包含太多 xticks 标签。我尝试使用一些方法xaxis.set_major_locator
,plt.xticks(range(len(df.index)), df.index)
但结果都很糟糕。我认为这是我的颜色蒙版设置的问题,但我不知道如何解决它。
非常感谢任何帮助和建议。谢谢!
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
np.random.seed(12345)
df = pd.DataFrame([np.random.normal(32000,200000,3650),
np.random.normal(43000,100000,3650),
np.random.normal(43500,140000,3650),
np.random.normal(48000,70000,3650)],
index=[1992,1993,1994,1995])
mean = df.mean(axis = 1)
std = df.std(axis = 1)
n = len(df.columns)
yerr = []
for index, row in df.iterrows():
yerr.append(stats.sem(row)*stats.t.ppf((1+0.95)/2, n-1))
theline = 42000
high_mask = theline > (mean+yerr)
low_mask = theline < (mean-yerr)
equal_mask = ((mean-yerr) <= theline) & (theline <= (mean+yerr))
plt.figure()
plt.bar(df.index[high_mask.values], mean.iloc[high_mask.values], alpha=0.5, color='blue')
plt.bar(df.index[low_mask.values], mean.iloc[low_mask.values], alpha=0.5, color='red')
plt.bar(df.index[equal_mask.values], mean.iloc[equal_mask.values], alpha=0.5, color='grey')
plt.errorbar(df.index, mean, yerr=yerr, fmt=".", color="k")
plt.axhline(y=theline, color="grey", alpha=0.7)
# plt.gca().set_xticklabels(df.index)
# plt.xticks(range(len(df.index)), df.index)
plt.show()
解决方案
推荐阅读
- java - 我有下三角矩阵问题,我的代码正在运行,但不是我想要的
- html - 修改 Bootstrap 工具提示的布局
- python - 如何使用 Django 比较 3 个日期?
- python - 在 Django 中搜索多个数据模型
- java - 无法使用 Servlet 和 JSP 更新 mySQL
- java - api 22 中 LocationListener 的问题
- kustomize - kustomize:使用 Argo Rollout CRD 进行战略合并
- objective-c - Restricting code to Objective-C or Swift callers
- javascript - Electron.JS + devtoolsinstaller:'BrowserWindow.addDevToolsExtension' 已弃用并将被删除。请改用“session.loadExtension”
- python - 有没有办法找到/检测两个像素的中间,或者由opencv创建的两条线?