matplotlib 中每个坐标的线图
Line plot for each coordinate in matplot lib
我正在尝试绘制连接起点 (x,y) 和终点 (x,y) 的线条
这意味着一条线将连接 (x1start,y1start) 到 (x1end,y1end)
我在数据框中有多行。
复制实际数据框的示例数据框如下所示:
df = pd.DataFrame()
df ['Xstart'] = [1,2,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
据此,如果我们查看 df 的第一行,一条线将连接 (1,0) 到 (6,6)
为此,我使用 for 循环为每一行画一条线,如下所示:
fig,ax = plt.subplots()
fig.set_size_inches(7,5)
for i in range (len(df)):
ax.plot((df.iloc[i]['Xstart'],df.iloc[i]['Xend']),(df.iloc[i]['Ystart'],df.iloc[i]['Yend']))
ax.annotate("",xy = (df.iloc[i]['Xstart'],df.iloc[i]['Xend']),
xycoords = 'data',
xytext = (df.iloc[i]['Ystart'],df.iloc[i]['Yend']),
textcoords = 'data',
arrowprops = dict(arrowstyle = "->", connectionstyle = 'arc3', color = 'blue'))
plt.show()
当我 运行 这个时,我有以下错误信息。
得到如下图:
箭头和线符合预期。箭头应该在每条线的终点。
谁能告诉我这是怎么回事?
谢谢,
齐普
您混淆了箭头的位置。 xy
和 xytext
中的每个坐标对都包含一个 x 和 y 值。
另外,为了在图表中看到箭头,您需要手动设置图表的限制,因为在缩放数据限制时,出于充分的理由,注释没有被考虑在内。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame()
df ['Xstart'] = [1,2,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
fig,ax = plt.subplots()
fig.set_size_inches(7,5)
for i in range (len(df)):
ax.annotate("",xy = (df.iloc[i]['Xend'],df.iloc[i]['Yend']),
xycoords = 'data',
xytext = (df.iloc[i]['Xstart'],df.iloc[i]['Ystart']),
textcoords = 'data',
arrowprops = dict(arrowstyle = "->",
connectionstyle = 'arc3', color = 'blue'))
ax.set(xlim=(df[["Xstart","Xend"]].values.min(), df[["Xstart","Xend"]].values.max()),
ylim=(df[["Ystart","Yend"]].values.min(), df[["Ystart","Yend"]].values.max()))
plt.show()
不是 100% 确定,但我认为在第二行中,您需要将 xy= 之后的部分设为元组,否则它会将 , 前面的部分设置为关键字参数,并尝试像往常一样传递 , 之后的部分参数
如果要绘制线段,可以使用以下代码。您可能需要箭头或某种 annotate
元素(注意正确的拼写),但您的目标似乎是绘制线段,这完成了:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame()
df ['Xstart'] = [1,2,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
fig = plt.figure()
ax = fig.add_subplot(111)
for i in range (len(df)):
ax.plot(
(df.iloc[i]['Xstart'],df.iloc[i]['Xend']),
(df.iloc[i]['Ystart'],df.iloc[i]['Yend'])
)
plt.show()
我正在尝试绘制连接起点 (x,y) 和终点 (x,y) 的线条 这意味着一条线将连接 (x1start,y1start) 到 (x1end,y1end) 我在数据框中有多行。 复制实际数据框的示例数据框如下所示:
df = pd.DataFrame()
df ['Xstart'] = [1,2,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
据此,如果我们查看 df 的第一行,一条线将连接 (1,0) 到 (6,6) 为此,我使用 for 循环为每一行画一条线,如下所示:
fig,ax = plt.subplots()
fig.set_size_inches(7,5)
for i in range (len(df)):
ax.plot((df.iloc[i]['Xstart'],df.iloc[i]['Xend']),(df.iloc[i]['Ystart'],df.iloc[i]['Yend']))
ax.annotate("",xy = (df.iloc[i]['Xstart'],df.iloc[i]['Xend']),
xycoords = 'data',
xytext = (df.iloc[i]['Ystart'],df.iloc[i]['Yend']),
textcoords = 'data',
arrowprops = dict(arrowstyle = "->", connectionstyle = 'arc3', color = 'blue'))
plt.show()
当我 运行 这个时,我有以下错误信息。
得到如下图:
箭头和线符合预期。箭头应该在每条线的终点。
谁能告诉我这是怎么回事?
谢谢,
齐普
您混淆了箭头的位置。 xy
和 xytext
中的每个坐标对都包含一个 x 和 y 值。
另外,为了在图表中看到箭头,您需要手动设置图表的限制,因为在缩放数据限制时,出于充分的理由,注释没有被考虑在内。
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame()
df ['Xstart'] = [1,2,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
fig,ax = plt.subplots()
fig.set_size_inches(7,5)
for i in range (len(df)):
ax.annotate("",xy = (df.iloc[i]['Xend'],df.iloc[i]['Yend']),
xycoords = 'data',
xytext = (df.iloc[i]['Xstart'],df.iloc[i]['Ystart']),
textcoords = 'data',
arrowprops = dict(arrowstyle = "->",
connectionstyle = 'arc3', color = 'blue'))
ax.set(xlim=(df[["Xstart","Xend"]].values.min(), df[["Xstart","Xend"]].values.max()),
ylim=(df[["Ystart","Yend"]].values.min(), df[["Ystart","Yend"]].values.max()))
plt.show()
不是 100% 确定,但我认为在第二行中,您需要将 xy= 之后的部分设为元组,否则它会将 , 前面的部分设置为关键字参数,并尝试像往常一样传递 , 之后的部分参数
如果要绘制线段,可以使用以下代码。您可能需要箭头或某种 annotate
元素(注意正确的拼写),但您的目标似乎是绘制线段,这完成了:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame()
df ['Xstart'] = [1,2,3,4,5]
df ['Xend'] = [6,8,9,10,12]
df ['Ystart'] = [0,1,2,3,4]
df ['Yend'] = [6,8,9,10,12]
fig = plt.figure()
ax = fig.add_subplot(111)
for i in range (len(df)):
ax.plot(
(df.iloc[i]['Xstart'],df.iloc[i]['Xend']),
(df.iloc[i]['Ystart'],df.iloc[i]['Yend'])
)
plt.show()