Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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
在python中绘制具有不同角度的填充图案填充矩形_Python_Drawing - Fatal编程技术网

在python中绘制具有不同角度的填充图案填充矩形

在python中绘制具有不同角度的填充图案填充矩形,python,drawing,Python,Drawing,我正在尝试用python绘制一个二维矩形板。该板将分为不同数量的部分,每个部分将填充阴影图案。此图案填充图案将具有指定的角度。下面显示了具有5个截面的矩形及其截面图案填充方向(以度为单位)为[0,45,0,-45,0]的阵列的示例。它需要能够显示任何方向,而不仅仅是通常的90、45、0,即33、74.5等 你知道我该怎么做吗?基本上,我只想在每个部分中显示方向,任何其他表达相同结果的方法都将非常受欢迎,例如,用一条线代替阴影线 编辑(在回答问题后): 格雷格提供的编辑脚本如下所示 from n

我正在尝试用python绘制一个二维矩形板。该板将分为不同数量的部分,每个部分将填充阴影图案。此图案填充图案将具有指定的角度。下面显示了具有5个截面的矩形及其截面图案填充方向(以度为单位)为[0,45,0,-45,0]的阵列的示例。它需要能够显示任何方向,而不仅仅是通常的90、45、0,即33、74.5等

你知道我该怎么做吗?基本上,我只想在每个部分中显示方向,任何其他表达相同结果的方法都将非常受欢迎,例如,用一条线代替阴影线

编辑(在回答问题后): 格雷格提供的编辑脚本如下所示

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循环,而不是在列表中的角度中插入随机角度。我建议你把它保存为脚本,然后随便修改一下。如果你被卡住了,请告诉我。格雷格,我现在更改了它,这样我可以指定我自己的角度数组,但角度似乎不正确。我编辑了原始问题,向你展示。谢谢格雷格。我认为只要每个子图保持正方形,角度是正确的,但我最有可能使用矩形截面。如何做到这一点?