我想在python中使用matplotlib创建一个带有矩形线的图,如下所示:
可悲的是,我不知道怎么称这种情节(我把它们合在一起,它有点像条形图但是旋转了90度),因此我的谷歌搜索是一个丢失的案例。我的数据集是这样的:
y x
1.0 1.0
0.6 2.3
0.3 3.3
0.1 1.4
-0.4 2.1
-0.6 3.8
-0.8 0.9
-1.0
我已将x
和y
放入两个变量列表中。基本上,应在当前值和下一个x
值之间绘制y
值(比较图片和示例中的值)。
答案 0 :(得分:2)
您应该尝试matplolib.path
,请尝试以下代码
import matplotlib.path as mpath
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
Path = mpath.Path
path_data = [
(Path.MOVETO, (1.58, -2.57)),
(Path.CURVE4, (0.35, -1.1)),
(Path.CURVE4, (-1.75, 2.0)),
(Path.CURVE4, (0.375, 2.0)),
(Path.LINETO, (0.85, 1.15)),
(Path.CURVE4, (2.2, 3.2)),
(Path.CURVE4, (3, 0.05)),
(Path.CURVE4, (2.0, -0.5)),
(Path.CLOSEPOLY, (1.58, -2.57)),
]
codes, verts = zip(*path_data)
path = mpath.Path(verts, codes)
# plot control points and connecting lines
x, y = zip(*path.vertices)
line, = ax.plot(x, y, 'go-')
ax.grid()
ax.axis('equal')
plt.show()
您将基本了解路径的工作原理,然后修改顶点以绘制自己的图形。有关详细信息,请参阅以下链接: https://matplotlib.org/api/path_api.html#module-matplotlib.path
答案 1 :(得分:2)
您可以使用"steps-"
线型进行策划,("steps-pre"
,"steps-post"
,"steps-mid"
)。这些确定坐标是否表示线的开始,中间和结尾。
step = plt.plot(y,x, linestyle="steps-pre")
一些完整的例子:
u = u"""y x
1.0 1.0
0.6 2.3
0.3 3.3
0.1 1.4
-0.4 2.1
-0.6 3.8
-0.8 0.9
-1.0 0"""
import io
import matplotlib.pyplot as plt
import numpy as np
y,x = np.genfromtxt(io.StringIO(u),skip_header=1, unpack=True)
step = plt.plot(x,y, linestyle="steps-pre")
plt.show()
答案 2 :(得分:1)
如果您想使用plt.plot
,还可以添加额外的顶点。所以而不是:
x = [1.0, 2.3, 3.3, 1.4, 2.1, 3.8, 0.9]
y = [1.0, 0.6, 0.3, 0.1, -0.4, -0.6, -0.8]
待办事项
new_x = [1.0, 1.0, 2.3, 2.3, 3.3, 3.3, 1.4, 1.4, 2.1, 2.1, 3.8, 3.8, 0.9]
new_y = [1.0, 0.6, 0.6, 0.3, 0.3, 0.1, 0.1, -0.4, -0.4, -0.6, -0.6, -0.8, -0.8]
给你:
import matplotlib.pyplot as plt
plt.plot(new_x, new_y)
当然,您可能会注意到我们只是重复x
两次的值(删除了最后一个值)和y
两次(删除了第一个值),这样一个简单的方法要使用纯Python将x
转换为new_x
,将y
转换为new_y
,请执行以下操作:
new_x = [a for a in x for _ in range(2)][:-1]
new_y = [a for a in y for _ in range(2)][1:]
使用itertools
或np.repeat
会更清晰。