在python中绘制具有不同角度的填充图案填充矩形
我正在尝试用python绘制一个二维矩形板。该板将分为不同数量的部分,每个部分将填充阴影图案。此图案填充图案将具有指定的角度。下面显示了具有5个截面的矩形及其截面图案填充方向(以度为单位)为[0,45,0,-45,0]的阵列的示例。它需要能够显示任何方向,而不仅仅是通常的90、45、0,即33、74.5等 你知道我该怎么做吗?基本上,我只想在每个部分中显示方向,任何其他表达相同结果的方法都将非常受欢迎,例如,用一条线代替阴影线 编辑(在回答问题后): 格雷格提供的编辑脚本如下所示在python中绘制具有不同角度的填充图案填充矩形,python,drawing,Python,Drawing,我正在尝试用python绘制一个二维矩形板。该板将分为不同数量的部分,每个部分将填充阴影图案。此图案填充图案将具有指定的角度。下面显示了具有5个截面的矩形及其截面图案填充方向(以度为单位)为[0,45,0,-45,0]的阵列的示例。它需要能够显示任何方向,而不仅仅是通常的90、45、0,即33、74.5等 你知道我该怎么做吗?基本上,我只想在每个部分中显示方向,任何其他表达相同结果的方法都将非常受欢迎,例如,用一条线代替阴影线 编辑(在回答问题后): 格雷格提供的编辑脚本如下所示 from n
from numpy import cos, sin
import numpy as np
import matplotlib.pyplot as plt
angles = [0,10,20,30,40,50]
numberOfSections = len(angles)
def plot_hatches(ax, angle, offset=.1):
angle_radians = np.radians(angle)
x = np.linspace(-1, 1, 10)
for c in np.arange(-2, 2, offset):
yprime = cos(angle_radians) * c - sin(angle_radians) * x
xprime = sin(angle_radians) * c + cos(angle_radians) * x
ax.plot(xprime, yprime, color="b", linewidth=2)
ax.set_ylim(0, 1)
ax.set_xlim(0, 1)
return ax
fig, axes = plt.subplots(nrows=1, ncols=numberOfSections, figsize=(16,(16/numberOfSections)), sharex=True, sharey=True)
for i in range(len(axes.flat)):
plot_hatches(axes.flat[i], angles[i])
fig.subplots_adjust(hspace=0, wspace=0)
plt.show()
生成一个下图。
但是在检查时,角度与输入角度不匹配。我有一个基本想法,尽管我怀疑您需要做更多的工作,这取决于您希望结果的灵活性
from numpy import cos, sin
import numpy as np
import matplotlib.pyplot as plt
def plot_hatches(ax, angle, offset=.1):
angle_radians = np.radians(angle)
x = np.linspace(-2, 2, 10)
for c in np.arange(-2, 2, offset):
yprime = cos(angle_radians) * c + sin(angle_radians) * x
xprime = sin(angle_radians) * c - cos(angle_radians) * x
ax.plot(xprime, yprime, color="k")
ax.set_ylim(0, 1)
ax.set_xlim(0, 1)
return ax
fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(8,8), sharex=True, sharey=True)
for i in range(len(axes.flat)):
plot_hatches(axes.flat[i], np.random.uniform(0, 90))
fig.subplots_adjust(hspace=0, wspace=0)
这里有两个部分:首先是一个函数plot\u hatches
,它在轴ax
上的单位正方形上绘制图案填充。这是通过取一条直线x,y=c
并使用旋转它来获得xprime
和yprime
,它们是与x轴成一定角度且偏移c
的直线坐标。迭代几个c
值覆盖单位平方,可以通过减小偏移量
参数使线条更密集
其次,我们需要一种方法来绘制彼此相邻的轴。这是我使用子图
完成的。这将返回fig,axes
轴axes
是一个轴实例数组,因此我们对它们进行迭代,将它们传递到函数中以绘制图案填充,并每次为其提供一个随机角度
编辑
我已将plot_hatches代码更改为逆时针旋转(在此编辑之前是顺时针方向)。现在,这将使用数组[0,-45,0,45,0]
精确生成问题中给出的图像:
非常感谢您这么做。如果你不介意的话,我有几个问题。这样就产生了随机的角度图案填充,我怎样才能让它使用指定的数组(例如[0,63,86,-11])生成一个1X4的网格呢?所以本质上我希望能够指定角度。再次感谢你的帮助!在我调用的for循环
plot_hatches
中,它有两个参数:第一个是要绘制的轴,第二个是角度。要使其为1x4,您需要更改plt.subplot
中的行数和列数(这是创建轴的地方)。然后只运行for循环,而不是在列表中的角度中插入随机角度。我建议你把它保存为脚本,然后随便修改一下。如果你被卡住了,请告诉我。格雷格,我现在更改了它,这样我可以指定我自己的角度数组,但角度似乎不正确。我编辑了原始问题,向你展示。谢谢格雷格。我认为只要每个子图保持正方形,角度是正确的,但我最有可能使用矩形截面。如何做到这一点?