python - 参考 MatPlotLib 中的绘图条
问题描述
我有下面的代码,我试图弄清楚如何根据选择事件更改条的颜色。当我单击一个条时,它会运行 onpick(),将高度与平均值进行比较并制作一个颜色列表,然后将其传递给 ax.bars 行中的条
我可以用变量 y 拉出点击的艺术家(一个 patch.rectangle),然后我可以用 plt.getp(y) 找到它的属性,它告诉我面色是什么。如果我尝试 plt.setp(y, fc='k') 我可以看到 y 的 facecolour 属性已经改变,但情节没有改变。关于如何引用绘制的矩形并更新其属性的任何帮助?
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import scipy.stats as st
import statsmodels.stats.api as sms
%matplotlib notebook
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])
df = df.T
fig = plt.figure()
ax = fig.add_subplot(111)
text=ax.text(0,45000, 'asdf',va='baseline', ha='left')
means = []
yerrs = []
for x in df.columns:
means.append(df[x].mean())
yerrs.append((df[x].mean()-sms.DescrStatsW(df[x]).tconfint_mean()[0]))
colours=['r','b','k','m']
ax.bar(range(len(means)),means,yerr=yerrs, capsize=3, picker=True, label=df.index)
ax.set_xticklabels([None,'1992','1993','1994','1995'])
ax.locator_params('x',nbins=8)
def onpick(event):
global x
x = float(event.artist.get_height())
global y
y = event.artist
global colours
colours=[]
global heights
heights=[]
for value in means:
heights.append(value)
if x == value:
colours.append('k')
if x > value:
colours.append('r')
if x < value:
colours.append('b')
ax.cla()
global bars
ax.bar(range(len(means)),means,yerr=yerrs, capsize=3, picker=True)
ax.set_xticklabels([None,'1992','1993','1994','1995'])
ax.locator_params('x',nbins=8)
#plt.setp(y, fc='k', fill=False)
plt.draw()
#plt.setp(y, height=20000)
#fig.canvas.draw()
fig.canvas.mpl_connect('pick_event', onpick)
解决方案
推荐阅读
- excel - 如何从其他大型 excel 文件 +1 000 000 行中提取计算/数据?
- python - 为什么我的列表从最后一个索引打印?
- reactjs - 将 firebase 添加到 react.js Web 应用程序
- ios - iPhone 6 / iPhone6 Plus上的Wordpress图像渲染问题
- javascript - 对齐带有图像的 HTML 中心
- c - 如何在生成随机表达式的 C 程序中检查除数是否为 0?
- c# - 我应该创建 DTO 以从 put 方法中的对象中删除 id 吗?
- sql - SQL 依赖关系查询 - SQL Server
- ios - 一个人的 Fastlane 会话在 CI 管道中工作,而另一个人却没有的常见原因是否有?
- php - 如何在 PHP 中使用 WCF 服务?