Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复matplotlib python中不均匀的矩形面片宽度_Python_Matplotlib_Rectangles - Fatal编程技术网

修复matplotlib python中不均匀的矩形面片宽度

修复matplotlib python中不均匀的矩形面片宽度,python,matplotlib,rectangles,Python,Matplotlib,Rectangles,我目前拥有的代码在绘图上绘制了一组矩形。但是,放大后,可以看到矩形的宽度不同。我现在得到的结果是: 到目前为止,我已经尝试更改矩形对象的各种选项,如别名、线宽、x位置,但没有任何东西可以帮助保持所有条的宽度一致。我的猜测是,这与DPI figurewidth计算有关,因为我事先知道条数和条宽,也许我可以手动设置绘图的宽度以容纳所有条,使它们具有相同的大小。但我不知道如何使用这种方法,我真的非常感谢任何有关这方面的帮助 我没有关于酒吧宽度的具体限制。我知道要绘制的条形图的数量,可以调整数据点以适

我目前拥有的代码在绘图上绘制了一组矩形。但是,放大后,可以看到矩形的宽度不同。我现在得到的结果是:

到目前为止,我已经尝试更改矩形对象的各种选项,如别名、线宽、x位置,但没有任何东西可以帮助保持所有条的宽度一致。我的猜测是,这与DPI figurewidth计算有关,因为我事先知道条数和条宽,也许我可以手动设置绘图的宽度以容纳所有条,使它们具有相同的大小。但我不知道如何使用这种方法,我真的非常感谢任何有关这方面的帮助

我没有关于酒吧宽度的具体限制。我知道要绘制的条形图的数量,可以调整数据点以适应图形大小,或者根据数据点的数量调整图形大小,但我不知道这是否会达到我想要的效果,或者我是否完全遗漏了其他内容

代码:


您选择的dpi为72。因此,条宽只有几个像素,有时是3,有时是4,因为没有半像素。如果您选择的dpi为600,那么问题就不会发生。@ImportanceOfBeingErnest我刚刚尝试了您的建议。我做了DPI 100,但宽度仍然不均匀。600对于我的应用程序来说太大,渲染时间太长。有没有一个精确的计算方法可以确保我没有半像素?我的意思是你可以做所有需要的数学来确保条在整数像素位置。。。但我不确定这是否值得。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Rectangle

def draw_bar(ax,n,data,o,c):
    color = 'red' if data%2==0 else 'green'
    rect_vol = Rectangle(
        xy=(n, 0),
        width=0.5,
        height=data,
        edgecolor='black',
        facecolor=color,
        linewidth=0,
        antialiased=True,
        alpha=0.4
    )
    ax.add_patch(rect_vol)

N = 75
max_height = 50
data_collection = np.random.randint(5,max_height,N)

fig = plt.figure(dpi=72)
plt.margins(0)
ax = plt.subplot2grid((4,6), (0,0), rowspan=4, colspan=6)
ax.set_label('XYZ')
ax.xaxis.grid(True,linestyle='--')
ax.yaxis.grid(True,linestyle='--')
ax.set_xlim(0,N)
ax.set_ylim(0,max_height)

for n, (data) in enumerate(data_collection):
    draw_bar(ax,n,data,np.random.choice(10),np.random.choice(10))

plt.show()