更多优质内容
请关注公众号

Python数据可视化(一) matplotlib,seaborn,pandas绘制折线图和饼图-张柏沛IT博客

正文内容

Python数据可视化(一) matplotlib,seaborn,pandas绘制折线图和饼图

栏目:Python 系列: 发布时间:2020-01-06 16:57 浏览量:7064

1.绘制饼图
# coding=utf-8
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

plt.rcParams['font.sans-serif']=['SimHei']  #正常显示中文
plt.rcParams['axes.unicode_minus'] = False  #正常显示负号

# 使用matplotlib模块绘制

# pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False)
# x:指定绘图的数据。
# explode:指定饼图某些部分的突出显示,即呈现爆炸式。
# labels:为饼图添加标签说明,类似于图例说明。
# colors:指定饼图的填充色。
# autopct:自动添加百分比显示,可以采用格式化的方法显示。
# pctdistance:设置百分比标签与圆心的距离。
# shadow:是否添加饼图的阴影效果。
# labeldistance:设置各扇形标签(图例)与圆心的距离。
# startangle:设置饼图的初始摆放角度。
# radius:设置饼图的半径大小。
# counterclock:是否让饼图按逆时针顺序呈现。
# wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等。
# textprops:设置饼图中文本的属性,如字体大小、颜色等。
# center:指定饼图的中心点位置,默认为原点。
# frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴 的范围和饼图的中心位置。

# 最简单的例子
data1 = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']

plt.pie(x=data1,labels=labels,autopct='%.1f%%')
plt.show()

# 加强版例子
data1 = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']
explode = [0,0.1,0,0,0]     # 凸显大专人群
plt.axes(aspect='equal')    # 将横纵坐标标准化处理,使得饼图是正圆不是椭圆
plt.pie(
    x=data1,
    explode=explode,
    labels=labels,
    autopct='%.1f%%',
    pctdistance=0.8,     # 设置百分比数据与圆心的距离
    labeldistance=1.1,    # 设置标签和圆心距离
    textprops = {'fontsize':10,"color":"black"}
)

plt.title("失信用户的受教育水平分布")
plt.show()


# 使用pandas模块绘制
# Series.plot(kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, label=None, secondary_y=False, **kwds)
# plot函数可以绘制折线图,饼图,直方图,条形图,核密度图,箱线图等
# kind:指定一个字符串值,用于绘制图形的类型,默认为折线图line。还可以绘制垂直条 形图bar、水平条形图hbar、直方图hist、箱线图box、核密度图kde、面积图area和饼图pie。 ax:控制当前子图在组图中的位置。例如,在一个2×2的图形矩阵中,通过该参数控制当 前图形在矩阵中的位置。 figsize:控制图形的宽度和高度,以元组形式传递,即(width,hright)。 use_index:bool类型的参数,是否将序列的行索引用作x轴的刻度,默认为True。 title:用以添加图形的标题。 grid:bool类型的参数,是否给图形添加网格线,默认为False。 legend:bool类型的参数,是否添加子图的图例,默认为False。 style:如果kind为line,该参数可以控制折线图的线条类型。 logx:bool类型的参数,是否对x轴做对数变换,默认为False。 logy:bool类型的参数,是否对y轴做对数变换,默认为False。
# loglog:bool类型的参数,是否同时对x轴和y轴做对数变换,默认为False。 xticks:用于设置x轴的刻度值。 yticks:用于设置y轴的刻度值。 xlim:以元组或列表的形式,设置x轴的取值范围,如(0,3)表示x轴落在0~3的范围之内。 ylim:以元组或列表的形式,设置y轴的取值范围。 rot:接受一个整数值,用于旋转刻度值的角度。 fontsize:接受一个整数,用于控制x轴与y轴刻度值的字体大小。 colormap:接受一个表示颜色含义的字符串,或者Python的色彩映射对象,该参数用于 设置图形的区域颜色。 table:该参数如果为True,表示在绘制图形的基础上再添加数据表;如果传递的是序列 或数据框,则根据数据添加数据表。 yerr:如果kind为bar或hbar,该参数表示在条形图的基础上添加误差棒。 xerr:含义同yerr参数。 label:用于添加图形的标签。 secondary_y:bool类型的参数,是否添加第二个y轴,默认为False。 **kwds:关键字参数,该参数可以根据不同的kind值,为图形添加更多的修饰性参数(依 赖于pyplot中的绘图函数)。

data1 = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']
data2 = {l:d for d,l in zip(data1,labels)}
print(data2)

data2 = pd.Series(data2)
data2.name = ''    # 将序列名称改为空字符,否则饼图左边会出现None的字眼

plt.axes(aspect='equal')
data2.plot(
    kind='pie',
    autopct="%.1f%%",
    title="失信用户的受教育水平分布",
    explode=[0,0.1,0,0,0],
    textprops = {'fontsize':10,'color':"black"}
)

plt.show()

# 会发现,使用pd绘制饼图和使用matplotlib绘制饼图的参数绝大部分一样,这是因为pandas的绘图函数内部其实还是使用了matplotlib模块来绘制的
# 所以使用pandas绘图时,查找参数可以直接查matplotlib的参数

# seaborn没有绘制饼图的函数



饼图绘制结果


2. 绘制折线图

# coding=utf-8
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib as mpl
from datetime import datetime

plt.rcParams['font.sans-serif']=['SimHei']  #正常显示中文
plt.rcParams['axes.unicode_minus'] = False  #正常显示负号

# plt.plot(x, y, linestyle, linewidth, color, marker, markersize, markeredgecolor, markerfactcolor, markeredgewidth, label, alpha)
# x:指定折线图的x轴数据。y:指定折线图的y轴数据。 linestyle:指定折线的类型,可以是实线、虚线、点虚线、点点线等,默认为实线。 linewidth:指定折线的宽度。 marker:可以为折线图添加点,该参数是设置点的形状。 markersize:设置点的大小。 markeredgecolor:设置点的边框色。 markerfactcolor:设置点的填充色。 markeredgewidth:设置点的边框宽度。 label:为折线图添加标签,类似于图例的作用。

data1 = pd.read_csv("./wechat.csv")
print(data1.head())

plt.plot(data1.Date,data1['Counts'],linewidth=2,marker="o")
# plt.xlabel("日期")    # 这里由于xlabel的标签长度太长,所以不调用xlabel,他就会自动抽取部分xlabel显示,而不是显示所有的xlabel
plt.ylabel("人数")
plt.title("每日微信文章阅读人数趋势")
plt.show()   #折线图1

# 改进 将阅读人数和阅读人次同时显示在途中,并且对于x轴的刻度标签,是否可以只保留月份和日期,并且以7天作为间隔

# 首先要将日期从字符串转为date格式,否则后面mpl.dates.DateFormatter("%m/%d")会报错的
dates = [datetime.strptime(d,"%Y/%m/%d").date() for d in data1.Date]    #strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。
plt.plot(dates,data1.Counts,linestyle="-",color="steelblue",label="阅读人数")
plt.plot(dates,data1.Times,linestyle="--",color="indianred",label="阅读人次")

ax=plt.gca()    #获取图的坐标信息
date_format = mpl.dates.DateFormatter("%m/%d")
ax.xaxis.set_major_formatter(date_format)   #设置x轴的日期格式
# xlocator=mpl.ticker.LinearLocator(10)   #设置x轴显示几个时间刻度
xlocator = mpl.ticker.MultipleLocator(7)    # 设置每个刻度的间隔天数
ax.xaxis.set_major_locator(xlocator)
plt.xticks(rotation=45)

plt.ylabel("人数")
plt.title("每日微信文章阅读人数和人次趋势")
plt.legend()
plt.show()    #折线图2


# 使用pandas绘制
data2=pd.read_csv("./weather.csv")
data3 = data2.pivot_table(index="month",columns="year",values="high")
print(data3)
data3.plot(kind="line",style=['-',"--","-."])
plt.xlabel("月份")
plt.ylabel("最高气温")
plt.title("每月平均气温趋势")
plt.show()    #折线图3


折线图1



折线图2



折线图3





更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Python数据可视化(一) matplotlib,seaborn,pandas绘制折线图和饼图

热门推荐
推荐新闻