条形图中的动态阈值线
Dynamic treshold line in a bar chart
我有一个堆叠条形字符,我想在其中添加动态阈值线。阈值是通过一个简单的公式计算的(每个特定值的 90%)
附上图片。绿线是我要找的。期待任何解决这个问题的想法。
这是我想出的:
我们的想法是让一个连续的 X
s 段用一个常数 y
值投影,前后有 0.5 的超出:
import numpy as np
import matplotlib.pyplot as plt
groups = 9
X = list(range(1, groups))
y = [1, 1, 2, 2, 1, 2, 1, 1]
threshold_interval_x = np.arange(min(X) - 0.5, max(X) + 0.5, 0.01).tolist()
threshold_y = []
for y_elt in y:
for i in range(0, int(len(threshold_interval_x) / (groups - 1))):
threshold_y.append(y_elt * 0.9)
plt.bar(X, y, width=0.4, align='center', color='yellow')
plt.plot(threshold_interval_x, threshold_y, color='green')
labels_X = ['PD', 'PZV', 'PP', 'FW', 'BA', 'IA', 'EA', 'NA']
plt.xticks(X, labels_X, rotation='horizontal')
plt.show()
这是输出:
您可以为此使用 matplotlibs step
-函数:
import pandas as pd
import matplotlib.pyplot as plt
假设您的数据结构如下:
df = pd.DataFrame({'In': [1, 1, 1, 2 , 0, 2, 0, 0], 'Out': [0, 0, 1, 0, 1, 0, 1, 1]}, index=['PD', 'PZV', 'PP', 'FW', 'BA', 'IA', 'EA', 'NA'])
In Out
PD 1 0
PZV 1 0
PP 1 1
FW 2 0
BA 0 1
IA 2 0
EA 0 1
NA 0 1
然后绘制条形图将是
df.plot(kind='bar', stacked=True, rot=0, color=['gold', 'beige'])
并在总和的 90% 处绘制阈值线将是
plt.step(df.index, df.sum(1) * .9, 'firebrick', where='mid', label = 'Ziel: 90%')
添加图例:
plt.legend()
导致:
我有一个堆叠条形字符,我想在其中添加动态阈值线。阈值是通过一个简单的公式计算的(每个特定值的 90%)
附上图片。绿线是我要找的。期待任何解决这个问题的想法。
这是我想出的:
我们的想法是让一个连续的 X
s 段用一个常数 y
值投影,前后有 0.5 的超出:
import numpy as np
import matplotlib.pyplot as plt
groups = 9
X = list(range(1, groups))
y = [1, 1, 2, 2, 1, 2, 1, 1]
threshold_interval_x = np.arange(min(X) - 0.5, max(X) + 0.5, 0.01).tolist()
threshold_y = []
for y_elt in y:
for i in range(0, int(len(threshold_interval_x) / (groups - 1))):
threshold_y.append(y_elt * 0.9)
plt.bar(X, y, width=0.4, align='center', color='yellow')
plt.plot(threshold_interval_x, threshold_y, color='green')
labels_X = ['PD', 'PZV', 'PP', 'FW', 'BA', 'IA', 'EA', 'NA']
plt.xticks(X, labels_X, rotation='horizontal')
plt.show()
这是输出:
您可以为此使用 matplotlibs step
-函数:
import pandas as pd
import matplotlib.pyplot as plt
假设您的数据结构如下:
df = pd.DataFrame({'In': [1, 1, 1, 2 , 0, 2, 0, 0], 'Out': [0, 0, 1, 0, 1, 0, 1, 1]}, index=['PD', 'PZV', 'PP', 'FW', 'BA', 'IA', 'EA', 'NA'])
In Out
PD 1 0
PZV 1 0
PP 1 1
FW 2 0
BA 0 1
IA 2 0
EA 0 1
NA 0 1
然后绘制条形图将是
df.plot(kind='bar', stacked=True, rot=0, color=['gold', 'beige'])
并在总和的 90% 处绘制阈值线将是
plt.step(df.index, df.sum(1) * .9, 'firebrick', where='mid', label = 'Ziel: 90%')
添加图例:
plt.legend()
导致: