数据分析综合实战(二)

86 阅读4分钟

双y轴可视化数据分析图表

import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('TkAgg')
import pandas as pd

df=pd.read_excel('mrbook.xlsx')                 #导入Excel文件
# 分别定义了x轴和两个y轴的数据。`x`是一个包含1到6的列表,`y1`和`y2`是从Excel文件中提取的"销量"和"rate"列的数据。
x=[1,2,3,4,5,6]
y1=df['销量']
y2=df['rate']
# 创建了一个图表对象,用于绘制柱状图和折线图。
fig = plt.figure()
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False  #用来正常显示负号
# 创建了一个子图对象`ax1`,将其添加到图表中
ax1 = fig.add_subplot(111)                  #添加子图
# 设置了图表的标题为"销量情况对比",并设置了x轴刻度标签为对应的月份。
plt.title('销量情况对比')
plt.xticks(x,['1月','2月','3月','4月','5月','6月'])
# 使用`bar`函数绘制柱状图,传入x轴和y1轴的数据,并设置了y轴标签为"销量(册)"。
ax1.bar(x,y1,label='left')
ax1.set_ylabel('销量(册)')            #y轴标签
# 使用`twinx`函数创建了一个共享x轴的第二个y轴坐标轴`ax2`,然后使用`plot`函数绘制折线图,传入x轴和y2轴的数据,并设置了折线的样式、颜色和标签。
ax2 = ax1.twinx()                       #共享x轴添加一条y轴坐标轴
ax2.plot(x,y2,color='black',linestyle='--',marker='o',linewidth=2,label=u"增长率")
ax2.set_ylabel(u"增长率")
# 使用text函数在折线图上添加数据标签,将每个数据点的值显示在图上。
for a,b in zip(x,y2):
    plt.text(a, b+0.02, '%.2f' % b, ha='center', va= 'bottom',fontsize=10,color='red')
plt.show()

image.png

颜色渐变饼状图的实现

from matplotlib import font_manager as fm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('TkAgg')

plt.rcParams['font.sans-serif']=['SimHei'] #解决中文乱码
# 使用了ggplot样式,使得绘制的图表具有ggplot的风格
plt.style.use('ggplot')
# 导入了色彩地图,以便在饼图中使用不同的颜色。
from  matplotlib import cm
#原始数据
shapes = ['天津', '江西省', '安徽省', '云南省', '福建省', '河南省', '辽宁省',
          '重庆', '湖南省', '四川省', '北京', '上海', '广西壮族自治区', '河北省',
          '浙江省', '江苏省', '湖北省', '山东省', '广东省']
values = [287,383,842,866,1187,1405,1495,1620,1717,
          2313,2378,3070,4332,5841,6482,7785,9358,9818,20254]
# 使用Pandas库创建了一个Series对象,其中包含了销售量数据和对应的地区名称。
s = pd.Series(values, index=shapes)
# 将地区名称和销售量分别存储在`labels`和`sizes`变量中。
labels = s.index
sizes = s.values
# 创建了一个大小为6x6的绘图区域。
fig, ax = plt.subplots(figsize=(6,6)) # 设置绘图区域大小
# 使用彩虹色彩地图生成了与销售量对应的颜色列表。
colors = cm.rainbow(np.arange(len(sizes))/len(sizes)) # 颜色地图:秋天→彩虹→灰色→春天→黑色
# 使用pie函数绘制饼图,通过传入销售量和地区标签,以及其他参数设置,如自动计算百分比(autopct)、阴影(shadow)和起始角度(startangle)。
patches, texts, autotexts = ax.pie(sizes, labels=labels, autopct='%1.0f%%',
                                   shadow=False, startangle=170, colors=colors)
# 设置了图表的属性,使得饼图显示为一个正圆,并设置了图表的标题。
ax.axis('equal')
ax.set_title('各地区线上图书销售占比图',loc='left')

# 重新设置字体大小
proptease = fm.FontProperties()
# 字体大小(从小到大): xx-small、x-small、small、medium、large、x-large、xx-large,或者是数字,如18
proptease.set_size('small')
# 创建了一个字体属性对象,并将字体大小调整为"small"。
# 然后,通过setp函数将自动文本和标签的字体属性设置为调整后的属性。
plt.setp(autotexts, fontproperties=proptease)
plt.setp(texts, fontproperties=proptease)
plt.show()

image.png

等高线图的实现

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use('TkAgg')

# 计算x,y坐标对应的高度值
def f(x, y):
    return (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)

# 生成x,y的数据
n = 256
# 使用 `np.linspace` 函数在-3到3之间生成了包含n个等间距值的数组。
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)

# 把x,y数据转换为二维数据
X, Y = np.meshgrid(x, y)

# 填充等高线
plt.contourf(X, Y, f(X, Y))

# 显示图表
plt.show()

image.png