表示范围的Python条形图

问题描述 投票:0回答:1

我想在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()

根据给定代码生成的条形图:enter image description here请告诉我如何将条形的值设置为range(.3,.4)之类的值。换句话说,我希望条形图从说(.3到.4代表一个范围),而不是(从当前的方式从0到.3)。

我知道使用条形图表示范围是奇怪的,如果有人对我有另一种实现方法,请添加您的代码。只要我得到一个表示至少6个变量范围的图,我就可以在其中轻松地手动更改范围值,我对此并不在乎。

python plot range bar-chart lib
1个回答
0
投票

一种方法是使用LineCollection并将线宽设置为类似于条形图。

要使用LineCollection,您需要提供一组x值,以绘制data中提供的每个范围。为了创建与您的范围相关联的y值,我使用了np.arange。由于np.arange只能计数整数,因此我将data中的每个值乘以10,然后将结果除以10,以返回到输入数据。

import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
import numpy as np

data = {'a':(0,.3), 'b': (0,.3), 'c': (0,.3), 'd': (0,.1),'e':(0,.1),'f':(0,.1), 'g':(.3,.4)}

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 = (np.arange(len(values))+1)* xs

verts = []
for x,y in zip(xs, values):
    verts.append(list(zip(x.tolist(), y.tolist())))

lc = LineCollection(verts, linewidths=10)

fig,ax = plt.subplots()
ax.add_collection(lc)
ax.set_xlim(0.,7.5)
ax.set_xticklabels(names)
plt.xticks(np.arange(len(values))+1, names)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.