我有四组随机正态分布数。该平均值用于绘制条形图,每个集合的95%置信区间用误差线绘制。
给定值y,将对应于y所在的四个范围的条形设置四种不同的颜色: 1.平均下限; 2.平均上限; 3.低于; 4.高于上层。
我想使用滑块控制y值并在每次滑动时更新条形颜色,我尝试使用以下代码,但每次更新都不能绘制条形图。
有人可以给我一些想法吗?
port (
clk: in std_logic;
restb: in std_logic;
bout : std_logic_vector(3 downto 0)
);
end entity;
architecture behave of mod9and5 is
signal state: unsigned(3 downto 0);
signal state_next: unsigned(3 downto 0);
begin
with state select state_next <=
"0001" when (state <= "0000") and (mode = '0');
"0000" when others;
直到这一步,颜色才能正常工作。然后更新功能不起作用。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import scipy.stats as st
from matplotlib.widgets import Slider
np.random.seed(12345)
df = pd.DataFrame([np.random.normal(33500,150000,3650),
np.random.normal(41000,90000,3650),
np.random.normal(41000,120000,3650),
np.random.normal(48000,55000,3650)],
index=[1992,1993,1994,1995])
N = len(df.columns)-1 # Degree of Freedom
avg = df.mean(axis=1) # Mean for each row
std = df.sem(axis=1) # Unbiased Standard Deviation
year = df.index.map(str) # Convert to String
conf95 = st.t.ppf(0.95, N)*std # 95% Confidence Interval
upper = avg + conf95
lower = avg - conf95
colormap = ['blue', 'aqua', 'orange', 'brown']
ini = 39900
chk1 = ini>upper # Check if y is greater than upper bound: blue
chk2 = ini<lower # CHeck if y is smaller than lower bound: brown
chk3 = (ini>=lower) & (ini<=avg) # Check if y is in between avg and lower: orange
chk4 = (ini>avg) & (ini<=upper) # Check if y is in between avg and upper: aqua
fig, ax =plt.subplots()
ax.bar(df.index[chk1.values], avg.iloc[chk1.values], width=1, edgecolor='k', color='blue')
ax.bar(df.index[chk2.values], avg.iloc[chk2.values], width=1, edgecolor='k', color='brown')
ax.bar(df.index[chk3.values], avg.iloc[chk3.values], width=1, edgecolor='k', color='orange')
ax.bar(df.index[chk4.values], avg.iloc[chk4.values], width=1, edgecolor='k', color='aqua')
ax.axhline(y=ini,xmin=0,xmax=10,linewidth=1,color='k')
ax.errorbar(df.index, avg, yerr=conf95, fmt='.',capsize=15, color='k')
plt.subplots_adjust(left=0.1, bottom=0.2)
plt.xticks(df.index, year) # Map xlabel with String
plt.yticks(np.arange(0,max(avg)+1,max(avg)/5))
axcolor = 'lightgoldenrodyellow'
axy = plt.axes([0.1, 0.1, 0.7, 0.03], axisbg=axcolor)
sy = Slider(axy, 'y', 0.1, int(max(upper)+1), valinit=ini)
非常感谢任何见解,非常感谢你们!
最佳肖恩
答案 0 :(得分:0)
只需删除
行即可ax.bar(df.index, avg, width=1, edgecolor='k', color='silver')
我不知道你为什么把它放在那里,但它会在彩色条形图上绘制一个完整的单色条形图并隐藏它们。
<小时/> 为了使一些交互成为可能,需要使用交互式后端。因此,当设置
%matplotlib inline
模式时,它不会在IPython中开箱即用。你有的选择:
%matplotlib notebook
。plt.show()
将代码作为脚本运行时使用GUI后端。在Spyder中,可以通过在{$ 3}}的新专用窗口中运行脚本来确保。