matplotlib:来自字符串的散点图

时间:2018-01-21 23:42:32

标签: python matplotlib

我在文本文件中有这种形式的数据:

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。我是否需要进一步预处理这些数据?

2 个答案:

答案 0 :(得分:2)

使用matplotlib> = 2.1

绘制分类变量散点图

在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()

用matplotlib绘制分类变量散点< 2.1

在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()

两种情况下的输出

enter image description here

答案 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))

这将为您提供最佳的可视化效果。