gpt4 book ai didi

python - 如何在matplotlib中绘制范围条形图?

转载 作者:行者123 更新时间:2023-12-01 04:45:44 29 4
gpt4 key购买 nike

我正在尝试使用 matplotlib 绘制类似于以下内容的图:

Desired sort of image

但是,我不太确定要使用哪种类型的图表。我的数据具有以下形式,其中起始 x 位置是大于或等于 0 的正值:

<item 1><start x position><end x position>
<item 2><start x position><end x position>

查看文档,我发现有 barherrorbar ,但我不确定是否可以使用带有起始偏移量的 barh 。考虑到我的数据类型,最好的方法是什么?我对这个库不太熟悉,所以我希望能获得一些见解。

最佳答案

开胃菜

exactly what you asked for

注释代码

据我所知,最直接的方法是直接在 matplotlib 上绘制矩形。 Canvas 使用 patches matplotlib的模块

简单的实现如下

import matplotlib.pyplot as plt
import matplotlib.patches as patches

def plot_rect(data, delta=0.4):
"""data is a dictionary, {"Label":(low,hi), ... }
return a drawing that you can manipulate, show, save etc"""

yspan = len(data)
yplaces = [.5+i for i in range(yspan)]
ylabels = sorted(data.keys())

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_yticks(yplaces)
ax.set_yticklabels(ylabels)
ax.set_ylim((0,yspan))

# later we'll need the min and max in the union of intervals
low, hi = data[ylabels[0]]
for pos, label in zip(yplaces,ylabels):
start, end = data[label]
ax.add_patch(patches.Rectangle((start,pos-delta/2.0),end-start,delta))
if start<low : low=start
if end>hi : hi=end

# little small trick, draw an invisible line so that the x axis
# limits are automatically adjusted...
ax.plot((low,hi),(0,0))

# now get the limits as automatically computed
xmin, xmax = ax.get_xlim()
# and use them to draw the hlines in your example
ax.hlines(range(1,yspan),xmin,xmax)
# the vlines are simply the x grid lines
ax.grid(axis='x')
# eventually return what we have done
return ax

# this is the main script, note that we have imported pyplot as plt

# the data, inspired by your example,
data = {'A':(1901,1921),
'B':(1917,1935),
'C':(1929,1948),
'D':(1943,1963),
'E':(1957,1983),
'F':(1975,1991),
'G':(1989,2007)}

# call the function and give its result a name
ax = plot_rect(data)
# so that we can further manipulate it using the `axes` methods, e.g.
ax.set_xlabel('Whatever')
# finally save or show what we have
plt.show()

我们的痛苦的结果已经在这篇文章的第一段中展示了......

附录

假设您觉得蓝色是一种非常暗淡的颜色......

patches您放置在绘图中的内容可以作为绘图的属性(恰本地命名为 patches ...)进行访问,并且也可以进行修改,例如

ax = plot_rect(data)
ax.set_xlabel('Whatever')
for rect in ax.patches:
rect.set(facecolor=(0.9,0.9,0.2,1.0), # a tuple, RGBA
edgecolor=(0.6,0.2,0.3,1.0),
linewidth=3.0)
plt.show()

NO. MORE. DULLNESS.

在我的 VH 看来,自定义绘图功能对于描绘情节来说应该是最不重要的,因为这种后期制作通常在 matplotlib 中非常容易。 .

关于python - 如何在matplotlib中绘制范围条形图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29451057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com