使用Matplotlib在Python中进行精确数据绘图

Python提供了丰富的选项来可视化数据。 我将通过创建带有分组条形图的条形图向您展示Matplotlib中绘制的基础知识。 它显示了1966年至2020年英国的选举结果:

Matplotlib plot of British election data

(©2019 铁砧

有关Python绘图库的完整比较,请参见《在Python中绘图数据的7种最受欢迎​​的方法》

精确而强大

Matplotlib是密谋动物园的鳄鱼。 它已经存在了一段时间,但仍然有很多咬人的地方。 Matplotlib使您可以精确控制绘图,但是,就像任何精确而强大的工具一样,有时这会迫使您比您想的要认真思考。

要了解我的意思,让我们开始创建多线图。 在继续之前,请注意,您可能需要调整Python环境以使此代码运行,包括以下内容。

  • 运行最新版本的Python( LinuxMacWindows的说明
  • 验证您正在运行与这些库一起使用的Python版本

数据可在线获得,并可使用熊猫导入:


   
   
import pandas as pd
df = pd. read_csv ( 'https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv' )

现在我们准备出发了。 首先导入Matplotlib和Numpy:


   
   
import matplotlib. pyplot as plt
import numpy as np

它具有广泛的形式 ,意味着每个政党都有一个专栏:


   
   
        year  conservative  labour  liberal  others
0       1966           253     364       12       1
1       1970           330     287        6       7
2   Feb 1974           297     301       14      18
..       ...           ...     ...      ...     ...
12      2015           330     232        8      80
13      2017           317     262       12      59
14      2019           365     202       11      72

接下来,告诉Matplotlib,您正在创建一个带有单轴的图形。 它为您提供了一个Figure and Axis对象。 如果您有多个子图,则有一个“人形”和多个“轴”。


   
   
# Create a Figure with one Axis on it
fig , ax = plt. subplots ( )

制作条形图

现在添加条形图本身。 多条形图是通过在同一轴上绘制四个单独的条形图制成的,每个条形图偏移一定量,因此它们可以并排显示。 这意味着您必须弄清楚如何计算每个条形图的偏移量,并且如果您想添加另一个政党,则必须重新考虑计算。


   
   
# The x-values of the bars.
years = df [ 'year' ]
x = np. arange ( len ( years ) )

# The width of the bars (1 = the whole width of the 'year group')
width = 0.15

# Create the bar charts!
ax. bar ( x - 3 *width/ 2 , df [ 'conservative' ] , width , label = 'Conservative' , color = '#0343df' )
ax. bar ( x - width/ 2 , df [ 'labour' ] , width , label = 'Labour' , color = '#e50000' )
ax. bar ( x + width/ 2 , df [ 'liberal' ] , width , label = 'Liberal' , color = '#ffff14' )
ax. bar ( x + 3 *width/ 2 , df [ 'others' ] , width , label = 'Others' , color = '#929591' )

轴标签和图例

那是它自己创建的图,但是您仍然需要添加一些轴标签和图例:


   
   
# Notice that features like labels and titles are added in separate steps
ax. set_ylabel ( 'Seats' )
ax. set_title ( 'UK election results' )

ax. set_xticks ( x )     # This ensures we have one tick per year, otherwise we get fewer
ax. set_xticklabels ( years. astype ( str ) . values , rotation = 'vertical' )

ax. legend ( )

使魔术发生

最后,调用魔术词以使绘图显示在屏幕上:

 plt. show ( ) 

嘿,presto!

Matplotlib plot of British election data

(©2019 铁砧

花费了一些脑力,但是您有一个不错的,干净的情节。

功率

您可能会看到此API如何为您提供大量功能。 假设您要绘制一条线来显示保守党和工党之间的席位差异。 进行操作时,在背景中添加一组网格线并设置一些合理的Y轴限制:


   
   
    ax. plot ( x , df [ 'conservative' ] - df [ 'labour' ] , label = 'Conservative lead over Labour' , color = 'black' , linestyle = 'dashed' )
    ax. grid ( color = '#eeeeee' )
    ax. set_axisbelow ( True )
    ax. set_ylim ( [ - 500 , 500 ] )
UK election results with plot line

(©2019 铁砧

如果您希望在其他地方运行此程序,则可以在此处将此示例作为Anvil应用程序复制(注意:Anvil需要注册才能使用)。

很棒的图表,但是我们可以简化它吗?

所有这些功能都很强大,但是人们总是想做一些情节。 为什么有人不能将Matplotlib包装在使事情变得简单得多的高级界面中? 这样就完成了,叫做Seaborn 。 下次我们会调查。

同时,祝贺您第一次使用Matplotlib可视化!


本文基于如何在Anvil的博客上使用Matplotlib进行绘图,并在获得许可的情况下重复使用。

翻译自: https://opensource.com/article/20/5/matplotlib-python

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值