我使用的是python 2.7和spyder IDE,这是我的数据:
Duration ptno
7432.0 X35133502100
7432.0 X35133502100
35255.0 T7956000304
35255.0 T7956000304
17502.0 T7956000304
17502.0 T7956000304
46.0 T7956000304
46.0 T7956000304
代码:
import time
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.read_csv('Nissin_11.09.2018.csv')
bx = df1.plot.bar(x='ptno', y='d', rot=0)
plt.setp(bx.get_xticklabels(),rotation=30,horizontalalignment='right')
plt.show()
对于Duration
和ptno
列中提到的每个值,我都会得到一个漂亮的条形图。作为参考,我附上了情节的图像文件。
但是当我尝试通过以下方式获得scatter
情节时:
df1.plot.scatter(x='ptno', y='d')
它将引发错误:
ValueError: scatter requires x column to be numeric
如何为我的数据绘制一个“散点图”?
根据@Hristo Iliev的建议,我使用了他的代码:
import seaborn as sns
_ = sns.stripplot(x='ptno', y='d', data=df1)
但是它只在轴上绘制两个唯一值,而我的条形图具有x轴值,所以我希望在x轴上具有所有值。
答案 0 :(得分:2)
一种选择是使用纯matplotlib。您需要创建一个用作x轴的数字数组,即[1,2,3,4,5,...]
,然后将刻度标签更改为列ptno
的值。
例如:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df1 = pd.DataFrame({"Duration":[7432,7432,35255,35255,17502,17502,46,46],
"ptno":["X35", "X35", "T79", "T79", "T79", "T79", "T79", "T79"]})
dummy_x = np.arange(len(df1.ptno))
plt.scatter(dummy_x, df1.Duration)
plt.xticks(dummy_x, df1.ptno)
plt.show()
答案 1 :(得分:0)
您不能使用错误指示的非数字值制作散点图。在散点图中,每个点的位置由每个变量的值在实轴上的位置确定。分类或字符串值(例如T7956000304
)没有直接映射到实轴上的位置。
您可以绘制的是一系列带状图,每个ptno
的唯一值一个。这与Seaborn最简单:
import seaborn as sns
_ = sns.stripplot(x='ptno', y='d', data=df1)