鉴于数据:
Column1; Column2; Column3
1; 4; 6
2; 2; 6
3; 3; 8
4; 1; 1
5; 4; 2
使用以下代码,我得到以下图形:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('test0.csv',delimiter='; ', engine='python')
df.plot(0,0)
plt.savefig('fig0.png')
并且,使用以下代码,我得到以下图形:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('test0.csv',delimiter='; ', engine='python')
df.plot(0,1)
plt.savefig('fig1.png')
df.plot(m,n)
中的逻辑是什么?我们想说我想要Column2 X Column3
m
和n
(df.plot(2,3)
)?
答案 0 :(得分:3)
在查找x
之前,将从DataFrame中删除用作y
的任何列。 (或者,从技术上讲,x
被设置为索引,这意味着它不再作为列提供。)因此,如果您执行.plot(x=0, y=0)
,x=0
表示“使用第一个位置列“,y=0
表示”删除x列后使用的第一个位置列“。
毋庸置疑,这可能会让人感到困惑,因为y
位置的变化取决于它是在x
之前还是之后。因此,如果你执行.plot(x=3, y=1)
,那么y确实是第1列,但是如果你执行.plot(x=0, y=1)
,那么y实际上是第2列(在删除第0列后它变为数字1)。
答案 1 :(得分:1)
按顺序位置指定x
和y
时,您在致电df.plot(x, y)
时会显示this bit of code:
if isinstance(data, DataFrame):
if x is not None:
if com.is_integer(x) and not data.columns.holds_integer():
x = data.columns[x]
data = data.set_index(x)
这会将x
从序数值(例如0)转换为列标签名称(例如'Column1'
)。
请注意,data.set_index(x)
被调用。因此,如果x
等于0,则将第一列设置为索引。接下来,当y
类似地转换为列标签时,
第0列现在是'Column2'
。因此,df.plot(0,0)
绘制了Column2与Column1的对比。
要绘制Column3与Column2的关系,您将使用df.plot(1,1)
,因为data.columns[1]
是'Column2'
,然后将其设置为索引后,data.columns[1]
就会'Column3'
1}}。
在注释中作为BrenBarn points out,通过标签名称,更容易出错的指定列的方式。
或者,如果您确实想使用序数值,请将它们明确地传递给df.columns
:
df.plot(x=df.columns[x], y=df.columns[y])
由于df.columns[x]
和df.columns[y]
是列标签名称,因此它们的含义不受set_index
的影响,因此混淆较少。
答案 2 :(得分:1)
根据documentation,您可以定义 m 和 n ( x 和 y 在文档中)像这样:
df.plot(df.columns[1],df.columns[2])
df.columns[1]
,即位置1的列名df.columns[2]
,即位置2的列名如果你想使用这些职位,那就是:
df.plot(1,1)
使用位置的逻辑是:当我们将 1 放在水平轴上时,此列将从垂直轴的选项中删除,因此只有两个选项可用(使用新索引)。这就是为什么df.plot(0,0)
实际设置第一列和下一列作为数据而df.plot(1,1)
使用第二列和最后一列的原因。我没有在文档中找到它,我发现它正在测试。
我认为这个想法是:没有意义在x轴和y轴上绘制相同的列,因此给出的第一列不适用于另一个轴。我希望它有所帮助! =)
PS:它将以奇怪的缩放和位置绘制,但如果缩小并在图中移动,您将确认值与每列的数据匹配