cod*_*ads 6 python plot range bar-chart lib
我想用 python 制作一个分类图来表示几个变量的范围。我想也许我应该使用条形图并为条形设置范围。这是我的条形图
import matplotlib.pyplot as plt
import numpy as np
data = {'a':.3, 'b': .3, 'c': .3, 'd': .1,'e':.1,'f':.1}
names = list(data.keys())
values = list(data.values())
plt.bar(names,values)
plt.show()
Run Code Online (Sandbox Code Playgroud)
从给定代码生成的条形图:
请告诉我如何将条形的值设置为类似 的值range(.3,.4)。换句话说,我希望条形从(0.3 到 .4 代表一个范围)而不是(0 到 .3 目前的方式)。
我知道使用条形图来表示范围很奇怪,如果有人有其他方法让我做到这一点,请添加您的代码。我并不真正关心,只要我得到一个代表至少 6 个变量范围的图,我可以在其中轻松地手动更改范围的值。
一种方法是使用 aLineCollection并将线宽设置为类似于条形图。
要使用 a,LineCollection您需要提供一组 x 值,绘制 中提供的每个范围data。为了创建与您的范围相关的 y 值,我使用了np.arange. 由于np.arange只能计算整数,因此我将每个值乘以data10,然后将结果除以 10 以返回输入数据。
data = {'a':(.3,.4), 'b': (.3,.4), 'c': (.3,.4), 'd': (0,.1),'e':(0,.1),'f':(0,.1)}
names = list(data.keys())
values = list(data.values())
values = [np.arange(a[0]*10, (a[1]+0.1)*10,1)/10 for a in values]
xs = [np.ones(a.shape) for a in values]
xs = [i*a for i,a in zip(range(len(xs)), xs)]
verts = []
for x,y in zip(xs, values):
verts.append(list(zip(x.tolist(), y.tolist())))
lc = LineCollection(verts, linewidths=40)
fig,ax = plt.subplots()
ax.add_collection(lc)
ax.set_xlim(-0.5,len(values) )
plt.xticks(np.arange(len(values)), names)
Run Code Online (Sandbox Code Playgroud)