我在文本文件中有这种形式的数据:
strings year avg
-- -- --
abc 2012 1854
abc 2013 2037
abc 2014 1781
pqr 2011 1346
pqr 2012 1667
xyz 2015 1952
我想在x轴上创建一个带有(不同)字符串的散点图,在y轴上创建(不同)年份,并且标记(圆)的大小应该等于平均值。我在matplotlib中实现它时遇到了麻烦,因为散布函数需要x,y(数据位置)的数值。因此,我无法将字符串指定为x,将年份指定为y。我是否需要进一步预处理这些数据?
答案 0 :(得分:2)
在matplotlib 2.1中,您可以只将字符串提供给分散函数。
strings = ["abc","abc","abc","pqr","pqr","xyz"]
year = list(range(2012,2018))
avg = [1854, 2037,1781,1346,1667,1952]
import matplotlib.pyplot as plt
import numpy as np
plt.scatter(strings, year, s=avg)
plt.show()
在2.1以下的matplotlib中,您需要根据与类别对应的某个索引绘制数据。然后相应地设置标签。
strings = ["abc","abc","abc","pqr","pqr","xyz"]
year = list(range(2012,2018))
avg = [1854, 2037,1781,1346,1667,1952]
import matplotlib.pyplot as plt
import numpy as np
u, ind = np.unique(strings, return_inverse=True)
plt.scatter(ind, year, s=avg)
plt.xticks(range(len(u)), u)
plt.show()
两种情况下的输出
答案 1 :(得分:1)
即使我也希望如此,并找到了一种更简单的方法。您可以使用Seaborn,这是一个基于Matplotlib的库。
您可以在任一轴上输入文本,在另一轴上输入时间/年份。为了获得最大的可视化效果,您可以设置两个轴的极限。让我们以“ df”作为数据框的名称
import seaborn as sns
minYear = df['year'].min()
maxYear = df['year'].max()
pl = sns.catplot(x = strings,y = year, data = df)
pl.set(ylim=(minYear,maxYear))
这将为您提供最佳的可视化效果。