数据可视化我为什么不用excel,利用python做一个简单的柱形图

数据可视化的一个重要方法就是柱形图,在excel中的柱形图是非常简单的,给一组数据就可以做出一个简单的柱形图,但是不知道你是不是和我一样,每次想做一个漂亮的图的时候总是被excel所限制,比如,横坐标轴显示不完整,线型没办法选择,字号,透明度,柱形图的宽度等,今天我们利用matplotlib就可以做出一个简单的柱形图

本文编程语言:python

IDE:Jupyter notebook

所需库:pandas、numpy、matplotlib、seaborn

想要实际操作你还需要点pandas的基础知识

实例:

导入需要的库:

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
import warnings; warnings.filterwarnings(action='once')
import tkinter as tk
from tkinter import filedialog
from tkinter.filedialog import askdirectory
import datetime as dt
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

导入处理的数据:

hot_dog=pd.read_csv(r"http://datasets.flowingdata.com/hot-dog-contest-winners.csv")
hot_dog
数据可视化我为什么不用excel,利用python做一个简单的柱形图

采用最普通的画法,画一个简单的柱形图:

plt.figure(figsize=(15,7))
plt.bar(hot_dog["Year"],hot_dog["Dogs eaten"])
数据可视化我为什么不用excel,利用python做一个简单的柱形图

这样优点太过单调了,我们稍微美化一下:

plt.figure(figsize=(25,9))
plt.bar(hot_dog["Year"],hot_dog["Dogs eaten"],label="热狗数量")
plt.ylabel('被吃掉的热狗数量',fontsize=17)
plt.xlabel('时间',fontsize=17)
plt.xticks(hot_dog["Year"],fontsize=15,color="k",alpha=.8)
plt.title("变化每年被吃掉的热狗数量变化图",bbox=dict(facecolor='gold', edgecolor='blue', alpha=0.1),fontsize=23)
plt.grid(color='g', linestyle='-', linewidth=1,alpha=.2)
plt.legend(loc="upper left",fontsize=16)
for a,b in zip(hot_dog["Year"],hot_dog["Dogs eaten"]):
 plt.text(x=a-.25,y=b+1,s=b,color="crimson",fontsize=14)
plt.show
数据可视化我为什么不用excel,利用python做一个简单的柱形图

过程解释:

创建一个25*9英寸的画布

plt.figure(figsize=(25,9))

画柱形图

plt.bar(hot_dog["Year"],hot_dog["Dogs eaten"],label="热狗数量")

设置x,y坐标轴名称:

plt.ylabel('被吃掉的热狗数量',fontsize=17)

plt.xlabel('时间',fontsize=17)

修改x轴的刻度标签:设置字体颜色,大小透明度

plt.xticks(hot_dog["Year"],fontsize=15,color="k",alpha=.8)

设置标题:大小,颜色,边框,字号等

plt.title("变化每年被吃掉的热狗数量变化图",bbox=dict(facecolor='gold', edgecolor='blue', alpha=0.1),fontsize=23)

设置网格线:可以设置颜色线型,线宽,透明度等

plt.grid(color='g', linestyle='-', linewidth=1,alpha=.2)

设置图例:loc设置位置

plt.legend(loc="upper left",fontsize=16)

设置数据标签:利用text,根据坐标的位置来标记

for a,b in zip(hot_dog["Year"],hot_dog["Dogs eaten"]):

plt.text(x=a-.25,y=b+1,s=b,color="crimson",fontsize=14)

我还有另外一种更漂亮的画法:利用vlines

plt.figure(figsize=(25,7))
plt.vlines(x=hot_dog["Year"], ymin=0, ymax=hot_dog["Dogs eaten"], color='firebrick', alpha=0.7, linewidth=3,label="热狗数量")
plt.scatter(x=hot_dog["Year"], y=hot_dog["Dogs eaten"]+.7, s=60, color="g", alpha=0.5)
plt.ylabel('被吃掉的热狗数量',fontsize=17)
plt.xlabel('时间',fontsize=17)
plt.xticks(hot_dog["Year"],fontsize=15,color="r",alpha=.73)
plt.title("变化每年被吃掉的热狗数量变化图",bbox=dict(facecolor='gold', edgecolor='blue', alpha=0.1),fontsize=23)
plt.grid(color='g', linestyle='-', linewidth=1,alpha=.2)
plt.legend(loc="upper left",fontsize=16)
for a,b in zip(hot_dog["Year"],hot_dog["Dogs eaten"]):
 plt.text(x=a-.25,y=b+2,s=b,color="crimson",fontsize=14) 
plt.show
数据可视化我为什么不用excel,利用python做一个简单的柱形图

是不是很简单:

matplotlib中的柱形图参数详解:

普通画法:matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)[source]

x:标量序列

height:柱形的高度

width=0.8:柱形的宽度,可选参数,默认为0.8

bottom:标量或类似数组,可选,条形基座的y坐标(默认值:0),默认我们不设置,如果是叠加的柱形图,需要重新设置

align:{'center','edge'},可选,默认:'center' 条形对齐x坐标:

  • 'center':将基准置于x位置的中心位置。
  • 'edge':将条的左边缘与x位置对齐。

其他参数:

color : 标量或类似数组,可选,颜色

edgecolor:标量或类似数组,可选,条形图边框的颜色

linewidth:标量或类似数组,可选,条形边缘的宽度。 如果为0,则不绘制边。

tick_label:字符串或类似数组,可选,刻度标签。 默认值:无(使用默认数字标签。)

数据可视化我为什么不用excel,利用python做一个简单的柱形图

可选参数color,edgecolor,linewidth,xerr和yerr可以是标量或长度等于条数的序列。 这使您可以使用条形作为堆积条形图或烛台图的基础。 细节:xerr和yerr直接传递给errorbar(),因此它们也可以具有形状2xN,用于独立指定低位和高位错误。


分享到:


相關文章: