python 可视化探索(一):基础图表

news2024/11/15 22:46:50

总结:本文为和鲸python 可视化探索训练营资料整理而来,加入了自己的理解(by GPT4o)

原作者:作者:大话数据分析,知乎、公众号【大话数据分析】主理人,5年数据分析经验,前蚂蚁金服数据运营,现京东经营分析师。

原活动链接

目录

  • 第一节 Matplotlib基础图表
  • 一、Matplotlib基础知识
    • 1.Matplotlib导入
    • 2.折线图绘制示例
      • ⏳跟练题目1
    • 3.基本图表设置
      • ⏳跟练题目2
    • 4.共轴坐标轴
      • 4.1共Y坐标轴
      • 4.2共X坐标轴
    • 5.综合案例
  • 二、Matplotlib基础图表
    • 1.图表选择
    • 2.折线图
    • 3.柱形图
      • ⏳跟练题目3
    • 4.条形图
    • 5.饼图
  • 三、闯关题
    • STEP1: 按照要求计算下方题目结果

第一节 Matplotlib基础图表

本节聚焦matplotlib基础知识和基本图表,你将掌握数据可视化的基础和实践技能,通过学习安装、配置和个性化设置,确保图表的专业性和易读性。并且,学会根据数据类型选择折线图、柱状图、散点图或饼图来展示和分析数据,提升数据驱动的决策能力,在经管领域有更多的实践应用。

一、Matplotlib基础知识

1.Matplotlib导入

什么是Matplotlib?

Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形,它是Python中最常用的可视化工具之一,功能非常强大,可以通过调用函数轻松方便地绘制数据分析中常见的各种图像,比如折线图、条形图、柱状图、散点图、饼图等。

import warnings
import matplotlib.pyplot as plt

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

warnings.filterwarnings("ignore") # 忽略警告信息
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   # 用来正常显示负号
plt.rcParams['figure.dpi'] = 100  # 分辨率

plt.style.available是Matplotlib库中的一个属性,用于列出所有可用的图表样式。Matplotlib预先定义了很多不同图表样式,使用这些样式,你可以轻松地改变图表的外观,例如颜色、线条风格等。

plt.style.available#查看matplotlib库的绘图样式
['Solarize_Light2',
 '_classic_test_patch',
 '_mpl-gallery',
 '_mpl-gallery-nogrid',
 'bmh',
 'classic',
 'dark_background',
 'fast',
 'fivethirtyeight',
 'ggplot',
 'grayscale',
 'seaborn-v0_8',
 'seaborn-v0_8-bright',
 'seaborn-v0_8-colorblind',
 'seaborn-v0_8-dark',
 'seaborn-v0_8-dark-palette',
 'seaborn-v0_8-darkgrid',
 'seaborn-v0_8-deep',
 'seaborn-v0_8-muted',
 'seaborn-v0_8-notebook',
 'seaborn-v0_8-paper',
 'seaborn-v0_8-pastel',
 'seaborn-v0_8-poster',
 'seaborn-v0_8-talk',
 'seaborn-v0_8-ticks',
 'seaborn-v0_8-white',
 'seaborn-v0_8-whitegrid',
 'tableau-colorblind10']
#选择设置图表演示为ggplot类型
plt.style.use("ggplot") 

在绘制图表之前,通常会先使用 plt.figure()来初始化图形窗口,这样可以确保接下来的绘图操作都在这个特定的窗口上进行。同时,通过指定 figsize参数值,可以控制图形的大小。简单来讲,建立画布就相当于你选择多大的一块“布”去作画。

#设置图表画布大小,设置其尺寸为宽9英寸和高6英寸
plt.figure(figsize = (9, 6)) 
<Figure size 900x600 with 0 Axes>




<Figure size 900x600 with 0 Axes>

2.折线图绘制示例

坐标轴标题、轴显示、图表标题、图例设置

在使用matplotlib进行图表绘制时,我们经常会进行一系列的设置以确保图表具有清晰、直观的视觉效果。这些设置包括坐标轴标题的设置,用于标明每个坐标轴所代表的数据含义;图表标题设置,用于给整个图表添加一个描述性的标题,帮助观众快速理解图表的主题;图例设置,当图表中包含多条数据曲线或多种数据标记时,可以通过图例来区分不同的数据系列,使得图表更加易于解读;还有轴显示设置,可以控制坐标轴的显示方式,如刻度的间隔、范围等;。

Tips:使用plt.plot()命令,只要在括号()传入数据,即可生成一个折线图,但是,对于做可视化来说,最难的是里面的图表元素设置,只有通过细致的设置图表元素,一张精美的图表才会成型。

#### 绘制一个简单的折线图
import pandas as pd
import numpy as np
import warnings
import matplotlib.pyplot as plt 
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

warnings.filterwarnings("ignore") # 忽略警告信息
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   # 用来正常显示负号
plt.rcParams['figure.dpi'] = 100  # 分辨率

#使用Series模拟一组数据
s = pd.Series(data=np.random.randn(3600), 
               index=pd.date_range('20130101',periods=3600),
             )

cs = s.cumsum()#累计和

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小
plt.title('近10年网页浏览量数据趋势', loc = "center")
plt.xlabel("年份",labelpad = 20) #设置X轴距离,labelpad控制标题到图表的距离
plt.ylabel("网页浏览量",labelpad = 20) #设置Y轴距离,labelpad控制标题到图表的距离
plt.legend(loc = "upper center",title='浏览量',title_fontsize=10,frameon=False) #frameon=False,图例去除边框
# plt.axis("off") #简化图表,可关闭坐标轴及标题

cs.plot(figsize = (9, 6))#设置图表大小
No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.





<Axes: title={'center': '近10年网页浏览量数据趋势'}, xlabel='年份', ylabel='网页浏览量'>

在这里插入图片描述

⏳跟练题目1

跟练1:你是一名业务分析师,在某次的业务研讨会中,你展示了近10天的累计业务量达成情况,如下所示,但是整体图表缺少图表标题、坐标轴标题、图例这些元素,受众中无法理解你所表达数据的含义,你需要在该图表中添加图表标题、坐标轴标题、图例。

Image Name

💡 提示:使用plt.plot()函数导入参数设置数据值np.arange(10)、plt.title()设置图表标题、plt.xlabel() 设置X轴标题、plt.ylabel() 设置Y轴标题、plt.legend()设置图例。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as psl

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

s = pd.Series(
    data = np.arange(10),
    index = pd.date_range('20240521',periods=10)
)
cs = s.cumsum()
print(cs)
cs.plot(figsize = (9,6))

plt.xlabel("日期",labelpad = 20)
plt.ylabel("业务量",labelpad = 20)

plt.title('近10天累计业务量数据趋势', loc = "center")
plt.legend(loc = "upper center",title='累计业务量',title_fontsize=10,frameon=False)
No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.


2024-05-21     0
2024-05-22     1
2024-05-23     3
2024-05-24     6
2024-05-25    10
2024-05-26    15
2024-05-27    21
2024-05-28    28
2024-05-29    36
2024-05-30    45
Freq: D, dtype: int32





<matplotlib.legend.Legend at 0x1abb08449a0>


3.基本图表设置

在这里插入图片描述

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

df = pd.DataFrame(data=np.random.randint(low=100, high=1000, size=30),
                  index=pd.date_range('20231101', periods=30),
                  columns=['销量'])

df.plot(
    color="red",
    linestyle="--",
    linewidth=2,
    marker="o",
    markersize=5,
    figsize=(9,6)
    )

plt.xticks(
    ticks=pd.date_range('20231101',periods=30),
    labels=['{}日'.format(i +1) for i in range(30)],
    rotation=45)  # 设置X坐标轴刻度
    
plt.yticks(
    ticks=np.arange(100, 1100, 100),
    labels=['{}单'.format(i*100) for i in range(10)])  # 设置Y坐标轴刻度

plt.ylim(0, 1200)  # 设置Y轴坐标最小值与最大值

# 数据标签
for x,y in zip(pd.date_range('20231101',periods=30), df['销量'].values):
    plt.text(x,y,y, ha = "center", va = "bottom", fontsize = 9)
    
plt.grid(
    color='red',
    linestyle='--',
    alpha=0.3,
    axis='y',
    visible=True,
)  # 设置网格线为虚线,axis='y'可只对Y轴打开网格线
<Figure size 900x600 with 0 Axes>

在这里插入图片描述

⏳跟练题目2

跟练2:假如你是一名电商销售数据分析师,现有近10个月销售业务量达成数据np.arange(10),你需要设计一个折线图,包含基本的图表元素,能直观地反映业务量的达成和趋势情况。

💡 提示:使用plt.plot()函数导入参数设置数据值、线型、点型,plt.title()设置标题,plt.grid()设置网格线,做出来的图表应与下面的图表类似

Image Name

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as psl

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

s = pd.Series(
    data = np.arange(10),
    index = pd.date_range('20240501',periods=10)
)
# cs = s.cumsum()
# print(cs)
# cs.plot(figsize = (9,6))

fig, ax = plt.subplots(figsize=(9, 6), facecolor='white')

s.plot(
    ax = ax,
    color="red",
    linestyle="--",
    linewidth=2,
    marker="o",
    markersize=5,
    # figsize=(9,6),
)
ax.set_facecolor('white')

plt.xlabel("日期",labelpad = 20)
plt.ylabel("业务量",labelpad = 20)

plt.xticks(
    ticks=pd.date_range('20240501',periods=10),
    labels=['{}日'.format(i +1) for i in range(10)],
    rotation=45)  # 设置X坐标轴刻度
    
plt.yticks(
    ticks=np.arange(0, 10, 1),
    labels=['{}单'.format(i) for i in range(10)])  # 设置Y坐标轴刻度

plt.title('近10天业务量数据趋势', loc = "center")
plt.legend(loc = "upper center",title='业务量',title_fontsize=10,frameon=False)

# plt.ylim(0, 11)  # 设置Y轴坐标最小值与最大值

for x,y in zip(pd.date_range('20240501',periods=10), s.values):
    plt.text(x,y,y, ha = "center", va = "bottom", fontsize = 15)

plt.grid(
    color='red',
    linestyle='--',
    alpha=0.3,
    axis='both',
    visible=True,
)  # 设置网格线为虚线,axis='y'可只对Y轴打开网格线
No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.

在这里插入图片描述

4.共轴坐标轴

在图表制作中,共享坐标轴指的是多个子图之间共享相同的Y轴或X轴。通过共享坐标轴,可以更好地比较不同子图之间的数据,因为它们都在相同的尺度上进行展示,特别是当需要对比多个相关图表时,共享坐标轴可以更能展现数据上的差异。

4.1共Y坐标轴

做多个数据系列折线图时默认是共用Y轴的,以下是多个系列数据共用一个Y坐标轴,可以展示不同系列数据在时间趋势上的波动变化。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

df = pd.DataFrame(np.random.randn(2000, 4),
                  index=pd.Series(pd.date_range('20230101', periods=2000)),
                  columns=list('ABCD')
                  )

df = df.cumsum()
df.plot(figsize=(9, 6))
plt.legend(loc='best')

<matplotlib.legend.Legend at 0x1abb4a4b3d0>




<Figure size 900x600 with 0 Axes>

在这里插入图片描述

4.2共X坐标轴

如果要共用一个X坐标轴,Y坐标轴分别展示,可设置参数subplots=True,这样设置为共X坐标轴数据图。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

df = pd.DataFrame(np.random.randn(2000, 4),
                  index=pd.Series(pd.date_range('20230101', periods=2000)),
                  columns=list('ABCD')
                  )

df = df.cumsum()
df.plot(figsize=(9, 6), subplots=True,)

plt.legend(loc='best')

<matplotlib.legend.Legend at 0x1abb3d19c70>




<Figure size 900x600 with 0 Axes>

在这里插入图片描述

5.综合案例

以下,借助一个可视化案例研究双十一销售量数据趋势。通过分析双十一销售量的数据趋势,我们可以获得宝贵的洞察和启示,有助于我们深入理解消费者购买行为、市场趋势和电商平台的运营策略。这样的研究能够帮助我们洞察消费者需求的变化,以及市场竞争的态势,为企业制定精准的营销策略提供数据支持。

通过研究双十一销售量数据趋势,我们可以更好地把握市场动态,提升企业的运营效率和竞争力,实现可持续的商业发展。对于经管专业的学习者而言,掌握这种数据分析能力将成为在未来职场中不可或缺的重要技能,下面使用一个综合数据可视化案例,来研究双十一销售量数据趋势。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

df = pd.DataFrame(data=np.random.randint(low=100, high=1000, size=30),
                  index=pd.date_range('20231101', periods=30),
                  columns=['销量'])

df.plot(
    color="red",
    linestyle="dashdot",
    linewidth=1,
    marker="o",
    markersize=5,
    figsize=(9,6))

plt.xlabel("年份", labelpad=20)  # 设置X轴距离,labelpad控制标题到图表的距离
plt.ylabel("电商销售量", labelpad=20)  # 设置Y轴距离,labelpad控制标题到图表的距离

plt.title('双十一销售量数据趋势', loc="center")

plt.legend(loc="upper center", title='销量', title_fontsize=10, frameon=False)

plt.xticks(
    pd.date_range('20231101', periods=30), 
    ['{}日'.format(i+1) for i in range(30)], 
    rotation=45)  # 设置X坐标轴刻度

plt.yticks(
    np.arange(100, 1100, 100), 
    ['{}单'.format(i*100) for i in range(10)])  # 设置Y坐标轴刻度
    
plt.ylim(0, 1100)  # 设置Y轴坐标最小值与最大值
plt.grid(visible=True, linestyle='dashed')  # 设置网格线为虚线,axis='y'可只对Y轴打开网格线

for a, b in zip(pd.date_range('20231101', periods=30), df['销量'].values):
    plt.text(a, b, b, ha="center", va="bottom", fontsize=9)

<Figure size 900x600 with 0 Axes>

在这里插入图片描述

二、Matplotlib基础图表

1.图表选择

选择合适的图表类型对于有效地传达数据信息非常重要。在选取图表时需要考虑你想要传达的信息、数据的性质和数量,以及你的受众情况,根据这些因素来选择最能有效地传达你的信息的图表类型。以下是一些常见的图表类型可供选择:

  • 比较数据:当你需要比较不同类别或不同时间点的数据时,条形图和饼图是很好的选择。条形图可以用来比较不同类别的数据,而饼图则可以用于展示部分与整体的关系。
  • 趋势分析:如果你想展示数据的趋势,例如随时间的变化,线形图或柱状图是很好的选择。线形图适用于时间序列数据,而柱状图则在类别数据上效果更好。
  • 部分与整体的关系:饼图或堆叠条形图可以用来展示部分与整体的关系。饼图适用于简单的比例关系,而堆叠条形图可以用于显示不同类别的累积效应。
  • 相关性分析:如果你想展示两个变量之间的关系,散点图是好的选择。通过散点图,你可以观察到两个变量之间的趋势和关联。
  • 时间序列数据:如果你正在处理时间序列数据,例如温度随时间的变化,那么线形图或者柱状图(如果时间被解释为类别)可能都会很有效。
  • 多变量数据:如果你有多维度的数据需要展示,例如多个产品在不同地区和时间的销售情况,可能需要使用更复杂的图表类型,如热力图、小提琴图等。

图表建议思维指南

Image Name

2.折线图

折线图是一种用折线的升降来表示统计数据变动趋势的图形。它通常用于显示数据随时间或有序类别的波动情况,可以清楚地反映数据增减变化的趋势和变化幅度。在折线图中,每个数据点通常通过线段连接,形成一条连续的折线,从而展示数据的动态变化。

**plt.plot():**用于绘制折线图。

函数签名

plt.plot(x, y, color, linestyle, linewidth, **kwargs)

参数解释

  • x, y: 表示数据的x和y坐标。这些是绘制图形所必需的基本参数;
  • color:控制线条的颜色。可以传入颜色的名称,例如’red’,'green’等;
  • linestyle:线条的风格。可以是’-‘(实线),’–‘(虚线),’-.‘(点划线),’:'(点线)等;
  • linewidth:线条的宽度。可以设定线条的粗细;
  • marker:数据点的标记。可以是’.'(点),‘o’(圆圈),‘s’(方块),‘d’(菱形)等;
  • markersize:标记的大小。可以设定数据点的大小;
  • markeredgecolor:标记边缘的颜色;
  • markerfacecolor:标记填充的颜色;
  • markeredgewidth:标记边缘的宽度;
  • label:用于图例的标签;
  • **kwargs:表示其他关键字参数的集合。这些参数用于控制线条的样式、颜色、标记等属性。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

#导入数据
df=pd.DataFrame(data={'日期': pd.date_range('20231101',periods=30),
                      '销售数': np.random.randint(low=100,high=1000,size=30),
                      '销售额': np.random.randint(low=1000,high=10000,size=30)}
               )
x=df['日期'].astype('str').tolist()
y=df['销售数'].tolist()

plt.plot(x,y,color="red",linestyle= "--",linewidth=1,marker="o",markersize=5)

plt.xlabel("日期",labelpad = 20) #设置X轴距离,labelpad控制标题到图表的距离
plt.ylabel("电商销售数",labelpad = 20) #设置Y轴距离,labelpad控制标题到图表的距离

plt.title('双十一销售量数据趋势', loc = "center")

plt.xticks(x, ['{}日'.format(i+1) for i in range(30)],rotation=45)#设置X坐标轴刻度

plt.grid(visible = True,linestyle='dashed')#设置网格线为虚线,axis='y'可只对Y轴打开网格线

for a,b in zip(x, y):
    plt.text(a,b,b, ha = "center", va = "bottom", fontsize = 9)

plt.show()

在这里插入图片描述

3.柱形图

柱形图是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱形图各柱体表示数据的分类项,柱体的高度表示该类别的数据值。

**plt.bar():**用于绘制柱形图。

函数签名

plt.bar(x, height, width, color, linewidth, align, **kwargs)

参数解释

  • x, height:x 为柱形图的 x 坐标,height 则为柱形的高度。这两个参数是必需的。
  • width:柱形的宽度。默认为 0.8。
  • color, edgecolor:分别用于设置柱形的填充颜色和边缘颜色。可以是单一颜色格式或包含多种颜色的序列。
  • linewidth:柱形边缘的线宽。
  • align:设置柱形与 x 坐标的对齐方式,可以是 ‘center’ 或 ‘edge’。默认为 ‘center’。
  • tick_label:用于 x 轴的刻度标签。
  • label:用于图例的标签。
  • alpha:柱形的透明度,范围在 0 到 1 之间。
  • hatch:用于填充柱形的斜线样式,例如 ‘/’、‘’、‘|’、‘-’ 等。
  • log:是否使用对数刻度。默认为 False。
  • ecolor:柱形误差线的颜色。
  • capsize:柱形误差线帽的大小。
  • **kwargs:表示其他关键字参数的集合。这些参数用于控制柱形的样式、颜色、标记等属性。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

#导入数据
df=pd.DataFrame(data={'客户性别':['男','女'],
                      '销售数': np.random.randint(low=100,high=5000,size=2)}
               )

x=df['客户性别'].tolist()
y=df['销售数'].tolist()

#绘制柱状图
plt.bar(x, y, width = 0.2, align = "center", label = "销售量")

plt.title("不同性别客户销售数", loc="center")#设置标题

#添加数据标签
for a,b in zip(x, y):
    plt.text(a,b,b,ha = "center", va = "bottom", fontsize = 12)

plt.xlabel("客户性别")#设置x和y轴的名称
plt.ylabel("销售数")

plt.legend()#显示图例
plt.show()#显示图像

在这里插入图片描述

⏳跟练题目3

跟练3:上面你做了一个折线图,但是,柱形图也可以展示业务量的达成和趋势,请将上面的图表类型转换为柱形图,并添加数据标签,使得数据信息表达和呈现更加直观。

💡 提示:plt.bar()导入数据值np.arange(10)+1可作柱形图,plt.text()可添加数据标签,做出来的图表应与下面的图表类似

Image Name

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as psl

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

s = pd.Series(
    data = np.arange(10),
    index = pd.date_range('20240501', periods=10)
)

fig, ax = plt.subplots(figsize=(9, 6), facecolor='white')

s.plot(
    kind='bar',
    ax=ax,
    color="blue",
)
ax.set_facecolor('white')

plt.xlabel("日期", labelpad=20)
plt.ylabel("业务量", labelpad=20)

plt.xticks(
    ticks=range(10),
    labels=['{}日'.format(i + 1) for i in range(10)],
    rotation=45  # 设置X坐标轴刻度
)
plt.yticks(
    ticks=np.arange(0, 10, 1),
    labels=['{}单'.format(i) for i in range(10)]  # 设置Y坐标轴刻度
)

plt.title('近10天业务量数据趋势', loc="center")
plt.legend(['业务量'], loc="upper center", title='业务量', title_fontsize=10, frameon=False)

# plt.ylim(0, 11)  # 设置Y轴坐标最小值与最大值

for i, (x, y) in enumerate(zip(pd.date_range('20240501', periods=10), s.values)):
    plt.text(i, y, y, ha="center", va="bottom", fontsize=15)

plt.grid(
    color='red',
    linestyle='--',
    alpha=0.3,
    axis='y',
    visible=True,
)  # 设置网格线为虚线,axis='y'可只对Y轴打开网格线

plt.show()

在这里插入图片描述

4.条形图

条形图是用宽度相同的条形的高度或长短来表示数据变动的图形。条形图可以横置或纵置,纵置时也称为柱形图,可横向做分类对比。

**plt.barh():**用于绘制条形图。

函数签名

plt.barh(y, width, height, color, edgecolor, linewidth, **kwargs)

参数解释

  • y, width:y为柱形图的y坐标,width则为柱形的宽度。这两个参数是必需的;
  • height:柱形的高度;
  • color:设置柱形的颜色;
  • edgecolor:柱形的边框颜色;
  • linewidth:柱形边框的宽度;
  • align:柱形的水平对齐方式,通常可以是’center’或’edge’;
  • xerr, yerr:分别表示x和y方向上的误差条,可以用于绘制误差条;
  • ecolor:误差条的颜色;
  • capsize:误差条两端的宽度;
  • label:图例的标签;
  • **kwargs:表示其他关键字参数的集合。这些参数用于控制条形图的样式、颜色、标记等属性。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

#导入数据
df=pd.DataFrame(data={'商品品类':['床品件套','厨房电器','汽车配件','浴室用品',
                              '卧室家具','电脑硬件','家装饰品','办公家具'],
                      '销售数': np.random.randint(low=100,high=5000,size=8)}
               )

x=df['商品品类'].tolist()
y=df['销售数'].tolist()

#绘制柱状图
plt.barh(x, width = y, height = 0.5, align = "center", label = "销售数")

#设置标题
plt.title("不同商品品类销售数", loc="center")

#添加数据标签
for a,b in zip(x, y):
    plt.text(b,a,b,ha = "left", va = "center", fontsize = 12)

plt.xlabel("销售数")
plt.ylabel("商品品类")#设置x和y轴的名称

plt.legend()#显示图例
<matplotlib.legend.Legend at 0x1abb4d34f40>


在这里插入图片描述

5.饼图

饼图是用圆形及圆内扇形的角度来表示数值大小的图形,它主要用于表示一个样本(或总体)中各组成部分的数据占全部数据的比例。饼图通常用于显示数据系列中每一项占该系列数值总和的比例,常常被用来展现数据的分布情况。

**plt.pie():**用于绘制饼图。

函数签名

plt.pie(x, explode=None, labels=None, colors=None, autopct=None,pctdistance=0.6, labeldistance=1.1, startangle=None,radius=None, counterclock=True, wedgeprops=None, textprops=None,center=(0, 0),framesize=6, rotatelabels=False, *, normalize=False, data=None)

参数解释

  • x:数组类型,用于指定每个扇形区域的大小。这些值将被归一化,所以它们的总和为1,每个值对应饼图的一个部分;
  • explode:用于设置饼图每个部分离中心的距离。默认为None,表示所有部分都紧贴着中心。如果提供一个数组,则数组的长度应与x的长度相同,并且每个元素表示对应部分离中心的距离;
  • labels:列表字符串,用于设置每个饼图部分的标签。默认为None;
  • colors:用于设置饼图部分的颜色。可以是颜色名称、RGB元组或十六进制颜色字符串。如果为None,将使用Matplotlib的默认颜色循环;
  • autopct:字符串或函数,用于控制饼图百分比的显示方式。如果为字符串,可以使用格式化的浮点数(例如’%.1f%%')。如果为函数,函数应接收一个百分比值,并返回一个字符串;
  • pctdistance:浮点数,用于设置百分比标签与圆心的距离,默认为0.6;
  • labeldistance:浮点数,用于设置标签与圆心的距离,默认为1.1;
  • startangle:浮点数,用于设置饼图的起始角度,默认为从x轴正半轴开始逆时针计算角度;
  • radius:浮点数或两个浮点数的元组,用于设置饼图的半径。如果为单个浮点数,则所有饼图部分都有相同的半径。如果为元组,则第一个元素为内半径(用于生成环形饼图),第二个元素为外半径;
  • counterclock:布尔值,用于设置饼图是顺时针还是逆时针排列,默认为True(逆时针);
  • wedgeprops:字典类型,用于设置饼图部分的属性,例如边缘颜色、线宽等;
  • textprops:字典类型,用于设置文本标签的属性,例如字体大小、颜色等;
  • center:两个浮点数的元组,用于设置饼图的中心点位置。默认为(0, 0);
  • framesize:整数,用于设置饼图的框架大小;
  • rotatelabels:布尔值,用于设置标签是否应旋转以与饼图部分对齐。默认为False;
  • normalize:布尔值,是否将输入数据归一化到1。如果为True,则忽略数据中的任何缺失值。默认为False;
  • data:可选参数,接受一个字典或可以转换为字典的对象。此参数与x参数互斥。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #导入matplotlib包
import matplotlib.style as psl

#魔法命令,用于在笔记本内联显示matplotlib图表
%matplotlib inline 
#确保图表以SVG格式显示
%config InlineBackend.figure_format = 'svg' 

psl.use('ggplot')
plt.figure(figsize = (9, 6)) #设置图表画布大小

#导入数据
df=pd.DataFrame(data={'区域':['华东','华北','东北','西北','西南','华南'],
                      '销售数': np.random.randint(low=100,high=5000,size=6)}
               )

#导入数据
x=df['销售数'].tolist()
labels = df['区域'].tolist()
explode = [0.01,0.03,0.05,0,0,0]  # 用于突出显示特定区域

#饼图
plt.pie(x,
        autopct='%.1f%%',#数据标签
        labels=labels,
        startangle=90, #初始角度
        explode=explode, # 突出显示数据
        pctdistance=0.87,  # 设置百分比标签与圆心的距离
        textprops = {'fontsize':12, 'color':'k'}, # 设置文本标签的属性值
        counterclock = False, # 是否逆时针
                   )

plt.title("双11各区域销售数占比")
Text(0.5, 1.0, '双11各区域销售数占比')

在这里插入图片描述

三、闯关题

STEP1: 按照要求计算下方题目结果

⛳️闯关题目:电商销售量的折线图展示

假设你是一家电商公司的数据分析师,老板要求你根据最近一个月的销售数据制作一个折线图来展示销售量的趋势。你需要使用pandas来生成模拟数据,并使用matplotlib来完成可视化,并且添加一些图表元素包括标题、轴标题、数据标签、网格线、线型、点型等,这样可以更直观地看到数据趋势。

💡题目提示

  • 使用pandas生成一个月的电商销售量数据。
  • 使用matplotlib制作折线图。
  • 图表需要包含以下基本元素:标题、轴标题、数据标签、网格线、线型和点型。
  • 图表需要清晰地展示出销售量的趋势。

请使用下面的代码生成最近一个月的电商销售量数据,根据此数据做一条销售量趋势折线图。

import pandas as pd  
# 生成日期范围  
date_rng = pd.date_range(start='2023-11-1', end='2023-11-30', freq='D') 

# 创建一个DataFrame  
df = pd.DataFrame(date_rng, columns=['日期'])
df['销量'] = [544, 749, 716, 818, 927, 938,  995, 1161, 997,  1110, 
               1465, 1312, 1400, 1097, 1123,  716, 875,  661,  596, 880,
               969,  709, 993, 1142,  821,  913, 945,  530,  860, 927]
df
日期销量
02023-11-01544
12023-11-02749
22023-11-03716
32023-11-04818
42023-11-05927
52023-11-06938
62023-11-07995
72023-11-081161
82023-11-09997
92023-11-101110
102023-11-111465
112023-11-121312
122023-11-131400
132023-11-141097
142023-11-151123
152023-11-16716
162023-11-17875
172023-11-18661
182023-11-19596
192023-11-20880
202023-11-21969
212023-11-22709
222023-11-23993
232023-11-241142
242023-11-25821
252023-11-26913
262023-11-27945
272023-11-28530
282023-11-29860
292023-11-30927
# 下面这里写入你的代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as psl

%matplotlib inline
%config InlineBackend.figure_format = 'svg'
 
date_rng = pd.date_range(start='2023-11-1', end='2023-11-30', freq='D') 

# 创建一个DataFrame  
df = pd.DataFrame(date_rng, columns=['日期'])
df['销量'] = [544, 749, 716, 818, 927, 938,  995, 1161, 997,  1110, 
               1465, 1312, 1400, 1097, 1123,  716, 875,  661,  596, 880,
               969,  709, 993, 1142,  821,  913, 945,  530,  860, 927]

# 绘制折线图  
fig, ax = plt.subplots(figsize=(9, 6), facecolor='white')

ax.plot(
    df['日期'],
    df['销量'],
    color="red",
    linestyle="--",
    linewidth=2,
    marker="o",
    markersize=5,
)
ax.set_facecolor('white')

# plt.figure(figsize=(9,6),facecolor='white')  # 设置图表大小  
# plt.plot(df['日期'], df['销量'], marker='o', linestyle='-', color='r')  # 设置线型和点型  
plt.title('近30天销售量数据趋势', loc = "center")
plt.legend(['销售量'], loc="upper center", title='销售量', title_fontsize=10, frameon=False)

plt.xticks(
    ticks=pd.date_range('20231101',periods=30),
    labels=['{}日'.format(i +1) for i in range(30)],
    rotation=45)  # 设置X坐标轴刻度
    
plt.yticks(
    ticks=np.arange(0, 1700, 100),
    labels=['{}单'.format(i*100) for i in range(17)])  # 设置Y坐标轴刻度
    # labels=['{}单'.format(i) for i in range(0, 1600, 100)]

for x,y in zip(pd.date_range('20231101',periods=30), df['销量'].values):
    plt.text(x,y,str(y), ha = "center", va = "bottom", fontsize = 15)

plt.grid(
    color='red',
    linestyle='--',
    alpha=0.3,
    axis='both',
    visible=True,
)  # 设置网格线为虚线,axis='y'可只对Y轴打开网格线

plt.show()  # 显示图表









在这里插入图片描述

df.plotax.plot 都可以用来绘制图表,但它们有一些重要的区别:

  1. df.plot:

    • 是 Pandas 提供的一个便捷方法,可以直接对 DataFrame 对象调用,用于快速绘制图表。
    • df.plot 创建的是一个新的 matplotlib Figure 和 Axes 对象。
    • 默认情况下,df.plot 不允许太多的自定义,适合快速绘制标准图表。
  2. ax.plot:

    • 是 Matplotlib 提供的方法,需要在一个现有的 Axes 对象上调用,用于精细化控制图表的绘制。
    • ax.plot 允许在同一个 Axes 对象上叠加多个图表。
    • 提供了更多的定制选项,适合复杂的图表和需要多次调整的场景。

在你的具体场景中,使用 ax.plot 可以更好地控制图表的细节,并确保所有的绘图都在同一个图表对象(Axes)上进行,这样可以更方便地进行统一的样式和设置管理。

q1:这一个月的销售量峰值是哪一天?选择正确的选项,并把选项赋值给a1。

  • A:10日
  • B:11日
  • C:12日
  • D:13日
#请根据做出来的图表判断,这一个月的销售量峰值是哪一天?
a1='B'#在=后填入销售量峰值是哪一天,可选项,A:'10日'、B:'11日'、C:'12日'、D:'13日'
a1
'B'

q2:这一个月的销售量峰值单量是多少单?并把结果赋值给a2。

#请根据做出来的图表判断,这一个月的峰值单量是多少?
a2= 1465#在=后填入峰值单量,如1400
a2
1465

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1956304.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六、Spring Boot - 上手篇(2)

&#x1f33b;&#x1f33b;目录 一、SpringBoot 构建RESTful API1.1 RESTful介绍1.2 RESTful接口设计1.3 用户实体bean创建 User1.4 创建Controller UserController1.5 Postman 测试RESTful 接口 二、SpringBoot 使用Swagger2 构建API文档2.1 Swagger2介绍2.2 SpringBoot 开启…

2020年 - 2022年 上市公司-劳动投资效率数据(原始数据、代码do文件、参考文献、最终结果)

劳动投资效率概述 劳动投资效率是衡量企业在人力资源管理方面效果和效率的关键指标。它关注企业在劳动力投资上的效益&#xff0c;即企业对于人力资源的投入与产出之间的比率。这一指标对于评估企业的人力资源管理策略及其对企业绩效的影响至关重要。 劳动投资效率的测度指标…

【Golang 面试 - 基础题】每日 5 题(八)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

Redis快速入门基础

Redis入门 Redis是一个基于内存的 key-value 结构数据库。mysql是二维表的接口数据库 优点&#xff1a; 基于内存存储&#xff0c;读写性能高 适合存储热点数据(热点商品、资讯、新闻) 企业应用广泛 官网:https://redis.io 中文网:https://www.redis.net.cn/ Redis下载与…

带你学会Git必会操作

文章目录 带你学会Git必会操作1Git的安装2.Git基本操作2.1本地仓库的创建2.2配置本地仓库 3.认识一些Git的基本概念3.1操作流程&#xff1a; 4.一些使用场景4.1添加文件场景一4.2查看git文件4.3修改文件4.4Git版本回退4.5git撤销修改 5.分支管理5.1查看分支5.2创建本地分支5.3切…

功能实现——使用 OpenPDF 将 HTML 转换为 PDF,并将其上传到 FTP 服务器

目录 1.需求分析2.项目环境搭建3.将 HTML 转换为 PDF3.1.代码实现mail.htmlHtmlToPDFController.javaPDFConverterService.javaPDFConverterServiceImpl.java 3.2.测试3.3.注意事项 4.将生成的 PDF 上传到 FTP 服务器4.1.搭建 FTP 服务器4.2.配置文件4.3.代码实现FtpUtil.javaF…

PostgreSQL性能优化之体系结构

本文介绍 PostgreSQL 数据库的体系结构&#xff0c;包括实例结构&#xff08;进程与内存&#xff09;、存储结构&#xff08;物理与逻辑&#xff09;以及插件式存储引擎。 实例与数据库聚簇 PostgreSQL 使用典型的客户端/服务器&#xff08;Client/Server&#xff09;架构&am…

【Android】Fragment的添加

上一篇文章学到了碎片的创建与生命周期&#xff0c;接下来学习碎片的常用操作&#xff0c;其中会用到上一篇文章的三个碎片&#xff0c;就做一个简单的说明吧&#xff1a;LeftFragment&#xff08;包含一个按钮&#xff09;、RightFragment4&#xff08;以粉色为背景的文本&…

【人工智能】穿越科技迷雾:解锁人工智能、机器学习与深度学习的奥秘之旅

文章目录 前言一、人工智能1. 人工智能概述a.人工智能、机器学习和深度学习b.人工智能发展必备三要素c.小案例 2.人工智能发展历程a.人工智能的起源b.发展历程 3.人工智能的主要分支 二、机器学习1.机器学习工作流程a.什么是机器学习b.机器学习工作流程c.特征工程 2.机器学习算…

动手学深度学习V2每日笔记(模型选择+过拟合和欠拟合)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&a…

Java之归并排序

归并排序 归并排序(Merge Sort)算法&#xff0c;使用的是分治思想。分治&#xff0c;顾名思义&#xff0c;就是分而治之&#xff0c;将一个大问题分解成小的子问题来解决。小的子问题解决了&#xff0c;大问题也就解决了。 核心源码: mergeSort(m->n) merge(mergeSort(m-&g…

对于500强企业来说,有比FTP好用的传输工具吗?

500强企业在进行文件传输时&#xff0c;会根据其业务需求、数据安全性要求以及技术架构的不同&#xff0c;选择多种文件传输方式&#xff0c;最常见的便是FTP。然而FTP在使用却存在较多的问题&#xff1a; 1&#xff09;安全性问题 缺乏安全策略&#xff1a;FTP本身不提供加密…

「百年孤独」

引言 《百年孤独》是加西亚马尔克斯创作的魔幻现实主义经典小说&#xff0c;刻画了布恩迪亚家族七代人的跌宕起伏和马孔多小镇的兴衰。是拉丁美洲文学中一部不朽的杰作。 故事概述 小说从布恩迪亚家族的始祖荷塞阿卡迪奥布恩迪亚和妻子乌尔苏拉开始&#xff0c;讲述了七代人…

DeiT III(Meta)论文解读

paper&#xff1a;DeiT III: Revenge of the ViT official implementation&#xff1a;https://github.com/facebookresearch/deit 出发点 本研究旨在重新审视ViT的监督训练方法&#xff0c;并提出一种基于ResNet-50训练方法的简化版新训练策略。与现有的自动数据增强方法不…

C++从入门到起飞之——友元内部类匿名对象对象拷贝时的编译器优化 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、友元 2、内部类 3、 匿名对象 4、对象拷⻉时的编译器优化 5、完结散花 1、友元 • 友元提供…

springAOP理解及事务

AOP&#xff1a; springAOP是什么&#xff1a; AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实就是面向特定方法编程。 使用场景&#xff1a; 比如你想统计业务中每个方法的执行耗时&#xff0c;那我们最…

基于bert的自动对对联系统

目录 概述 演示效果 核心逻辑 使用方式 1.裁剪数据集 根据自己的需要选择 2.用couplet数据集训练模型 模型存储在model文件夹中 3.将模型转换为ONNX格式 4.打开index.html就可以在前端使用此自动对对联系统了。 本文所涉及所有资源均在传知代码平台可获取。 概述 这个生成器利用…

什么是婚恋聊天交友源码?今天大家讲解一下。源码交付,支持二开,可打包APP小程序H5。

婚恋交友APP开发前景 对于现代的年轻人来说&#xff0c;社恐已经是深入骨子里不可别除的&#xff0c;除了每天上班下班&#xff0c;许多人宁愿宅在家里&#xff0c;面对线下的相亲机构&#xff0c;家里长辈介绍的会都是饭度抗柜的。而这几年疫情的影响更是大大的限制了正常的社…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

7. 运行时数据区-栈

栈的分类 栈分为Java虚拟机栈还有本地方法栈&#xff1a; Java虚拟机栈&#xff1a;用于保存Java中的方法相关的内容本地方法栈&#xff1a;用于保存在Java中使用native 标记的用C来实现方法 由于hotspot的作者发现使用一个栈就可以保存以上两个部分的内容&#xff0c;所以在…