有没有想过如何使用 Python 来创建令人惊叹的数据可视化?
在 本系列的第一部分 ,我们了解了 如何 使用 matplotlib 库绘制线图和直方图。我们还了解了如何更改图的默认大小以及 如何 , 向图 、 轴 图例
在本文中,我们将看到可以使用 matplot 库绘制的更多类型的图表,以及 如何改进它们的 专业提示
- 条形图
- 散点图
- 堆叠图
- 饼图
在代码中
plt
使用 matplotlib 模块的别名
plt
.
让我们开始吧!
条形图
条形图只是 使用条形来表示特定 x 值的 y 值 。例如,您可以使用条形图来描绘过去十年的股票价格。为此,您可以使用 bar 函数 。此函数的第一个参数是 x 轴的值列表,第二个参数是 y 轴的对应值列表。值得一提的是, x 和 y 列表中的点数必须相等 .
考虑以下脚本:
stock_prices = [23,21,43,32,45,34,56,23,67,89] years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018] plt.bar(years, stock_prices) plt.show()
输出如下所示:
bar 函数的参数
color
传递一个值来更改条形的颜色
,如下所示:
stock_prices = [23,21,43,32,45,34,56,23,67,89] years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018] plt.bar(years, stock_prices, color = "deepskyblue", edgecolor = "rebeccapurple") plt.show()
在上面的脚本中,color 属性的值设置为
deepskyblue
。上述脚本的输出如下所示:
专业提示:如何创建水平条形图
除了垂直条形图, 您还可以绘制水平条形图 。为此,您只需将 Horizontal 作为 bar 函数的 orientation 参数的值传入即可。请看以下脚本:
stock_prices = [23,21,43,32,45,34,56,23,67,89] years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018] plt.barh(years, stock_prices, orientation = "horizontal", color = "deepskyblue", edgecolor = "rebeccapurple") plt.show()
在输出中,您将看到一个水平条形图,如下所示:
散点图
散点图与线图类似,但它们不使用曲线来显示 x 轴和 y 轴值之间的关系。相反, 您只需绘制每对 x 和 y 值 。要创建散点图,您只需使用 scatter 函数。x 轴和 y 轴的值分别作为此函数的第一个和第二个参数传入。
看一下下面的脚本:
stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89] credit_ratings = [2,3,5,2,5,3,5,2,6,8,2,3,5,2,5,3,5,2,6,8,2,3,5, 2,5,3,5,2,6,8] plt.scatter(credit_ratings, stock_prices) plt.show()
上面脚本的输出如下所示:
默认情况下,散点图使用蓝色圆圈,但您可以更改形状和颜色。要绘制的形状由 marker 参数指定。同样,绘图颜色也传递给该
color
参数。请看以下脚本:
stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89] credit_ratings = [2,3,5,2,5,3,5,2,6,8,2,3,5,2,5,3,5,2,6,8,2,3,5, 2,5,3,5,2,6,8] plt.scatter(credit_ratings, stock_prices, marker = "x", color = "#5d3087") plt.show()
这里,'
x
' 作为标记传入,而十六进制代码
#5d3087
作为颜色传入。或者,您可以传入颜色的名称而不是其十六进制值。上述脚本的输出如下所示:
专业提示:如何更改散点图的标记大小
通过传入 s 参数的值来
by passing in a value for the
s
parameter
。默认值为 20。请看以下脚本:
stock_prices = [23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89,23,21,43,32,45,34,56,23,67,89] credit_ratings = [2,3,5,2,5,3,5,2,6,8,2,3,5,2,5,3,5,2,6,8,2,3,5, 2,5,3,5,2,6,8] plt.scatter(credit_ratings, stock_prices, marker = "o", color = "deepskyblue", edgecolors = "rebeccapurple", s = 400) plt.show()
输出如下所示:
当然,您可能已经注意到,这些标记非常大,因此很难分辨它们在 x 轴和 y 轴上对应的值。这更像是一个说明性练习。在制作自己的散点图时,请务必选择合理的标记大小,以平衡可见性和清晰度。
堆叠图
当 x 轴的每个数据点都有来自多个类别的数据 。例如,您可以使用堆叠图绘制过去八年三家公司的股价。这些公司的数据将堆叠 在一起, 以便于比较。
要绘制堆栈图,您需要使用
stackplot
function of the
plt
module
。第一个参数是要在 x 轴上绘制的数据列表,其余参数是您想要在堆栈图中显示的每个类别的数据。您还可以使用属性为每个堆栈指定颜色
color
。
year = [2014, 2015, 2016, 2017, 2018] company1 = [78,57,68,97,51] company2 = [85,65,74,105,62] company3 = [65,42,56,90,45] plt.plot([],[], color = "#93c149", label = "company1") plt.plot([],[], color = "#25b6ea", label = "company2") plt.plot([],[], color = "#5d3087", label = "company3") plt.stackplot(year,company1,company2,company3,colors = ["#25b6ea","#93c149","#5d3087"]) plt.legend() plt.title("Average Stock Prices for the three companies") plt.xlabel("year") plt.ylabel("Stock Prices") plt.show()
上面脚本的输出如下所示:
专业提示:如何创建对称堆叠图
您还可以通过传入
'sym'
基线参数的值来
,如下所示:
year = [2014, 2015, 2016, 2017, 2018] company1 = [78,57,68,97,51] company2 = [85,65,74,105,62] company3 = [65,42,56,90,45] plt.plot([],[], color = "#93c149", label = "company1") plt.plot([],[], color = "#25b6ea", label = "company2") plt.plot([],[], color = "#5d3087", label = "company3") plt.stackplot(year, company1, company2, company3, colors = ["#25b6ea","#93c149","#5d3087"] , baseline = "sym") plt.legend() plt.title("Average Stock Prices for the three companies") plt.xlabel("year") plt.ylabel("Stock Prices") plt.show()
在输出中,您将看到一个对称堆栈图:
饼图
饼图呈圆形,其中每个切片代表属于特定类别的数据部分。要绘制饼图,您需要调用
the
pie
function of the
plt
module
。第一个参数是数据列表。然后,您需要将类别名称列表传递给参数
labels
。如果
shadow
将参数设置为
True
,则图表边缘附近会出现一条细阴影。最后,
explode
可以使用该参数在饼图的不同切片之间添加空间。
值得一提的是,您不必指定每个类别在图表中所占的确切百分比。相反,您只需指定每个类别的值;饼图会自动将这些值转换为百分比。以下脚本为一个国家一年的假想预算支出创建了一个饼图:
sectors = "Health", "Defence", "Education', "Tourism" amount = [40,75,35,15] colors = ["#93c149","#25b6ea","#5d3087","#d15197"] plt.pie(amount, labels = sectors, colors = colors ,shadow = True, explode = (0.025, 0.025, 0.025, 0.025), autopct = "%1.1f%%") plt.axis("equal") plt.show()
脚本的输出如下所示:
让我们增加
explode
第一个类别的值,看看会得到什么结果。我们将其设置为 0.5:
sectors = "Health", "Defence", "Education", "Tourism" amount = [40,75,35,15] colors = ["#93c149","#25b6ea","#5d3087","#d15197"] plt.pie(amount, labels = sectors, colors=colors ,shadow = True, explode = (0.5, 0.025, 0.025, 0.025), autopct = "%1.1f%%") plt.axis("equal") plt.show()
在输出中,您会看到“健康”与其他类别之间的距离增加了,如下所示:
专业提示:根据基线改变角度
默认情况下,饼图的切片排列方式是,占饼图最大份额的类别将出现在左上角,其他类别则出现在随机位置。但是,您可以更改此行为。
例如,如果您希望
第一个类别相对于基线
(一条穿过饼图中心的假想水平线)成 90 度角,则可以将 90 作为
startangle
饼图函数参数的值传入,如下所示:
sectors = "Health", "Defence", "Education", "Tourism" amount = [40,75,35,15] colors = ["#93c149","#25b6ea","#5d3087","#d15197"] plt.pie(amount, labels = sectors, colors = colors ,shadow = True, explode = (0.025, 0.025, 0.025, 0.025), autopct = "%1.1f%%", startangle = 90) plt.axis('equal') plt.show()
在输出中,您将看到名为“健康”的类别现在相对于基线成 90 度角:
结论
就这样结束了!
在本文中,您学习了如何绘制条形图、堆叠图、散点图和饼图。对于任何有兴趣学习如何绘制和可视化数据的人来说,matplotlib 库都是必备的。
想要了解更多有关使用 matplotlib 进行数据可视化的信息?请务必查看我们的“ 数据科学 Python 简介” 课程。对于想要了解更多有关 Python 数据科学和数据可视化的初学者和中级 Python 用户来说,这都是一个极好的资源。
发表评论 取消回复