Backend - 数据分析 matplotlib

目录

一、作用

二、安装环境

(一)虚拟环境终端

(二)代码导入库

(三)设置中文

1. 使用window自带(推荐)

2. 下载字体

三、应用

(一)基础知识

1. plt.plot()

(1)折线图的画图样式

(2)设置颜色

(3)设置标记符号

(4)设置线型

2. plt.show()

3. plt.figure()

4. plt.title()

5. plt.xlabel() & plt.ylabel()

6. plt.tight_layout()

(二)多个子图

1. plt.subplots()

2. figure对象的add_subplots

3. figure对象的add_axes

4. 设置子图样式

(二)图形实例

1. 折线图 plot

(1)代码

(2)效果图

2. 条形图 bar

(1)代码

(2)效果图

3. 饼图 pie

(1)代码

(4)效果图

4. 折线图&条形图

(1)代码

(2)效果图


一、作用

        Matplotlib 是 Python 的绘图库。

二、安装环境

(一)虚拟环境终端

pip install matplotlib

(二)代码导入库

import matplotlib.pyplot as plt

(三)设置中文

        默认不支持中文。

1. 使用window自带(推荐)

import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

2. 下载字体

        下载某字体文件并放在项目里。

        网址(任选一个字体):https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese

        代码:

        每个有中文显示的地方,都需要设置fontproperties。

import matplotlib
zhfont = matplotlib.font_manager.FontProperties(fname="../项目名/应用app名/static/font/SourceHanSansSC-Regular.otf") 
plt.title("书籍出售情况", fontproperties=zhfont)  # 图表标题
plt.xlabel("出售书籍", fontproperties=zhfont)  # 横坐标轴标签
plt.legend(loc='upper left', prop=zhfont)  # 显示图例(一定要在plot的后面)
plt.xticks(list(books)[::3], rotation=45, fontproperties=zhfont) # 设置横坐标数据样式:[::3] 间隔3个显示一次;rotation 文字旋转度数;fontproperties设置中文字体

三、应用

(一)基础知识

1. plt.plot()

(1)折线图的画图样式
plt.plot(x轴数据, y轴数据, color='red', marker='o', linestyle='--', label='值标签') # 画图
plt.plot(x轴数据, y轴数据, 'g+', label='值标签') # 画图。其中g+表示color&marker
(2)设置颜色

        ① 'r'、'y'、'g'、'c'、'b'、'k'、'w'(红、黄、绿、青、蓝、黑、白)

        ② 'red'等全称

        ③ 十六进制或RGBA格式

(3)设置标记符号

        点'.'、圆圈'o'、三角'v'、方块's'、星'*'、六角形'h'、加号'+'、菱形'd'

(4)设置线型

        实线'-'、虚线'--'、虚点'-.'、点线':'

2. plt.show()

        显示画布

3. plt.figure()

        新建图形(画布)对象

fig = plt.figure(figsize=(5,3), facecolor='pink') # figsize设置画布宽高;facecolor设置背景色

4. plt.title()

        设置图表标题

plt.title("Matplotlib demo") # 图表标题

5. plt.xlabel() & plt.ylabel()

        设置坐标轴标签

plt.xlabel("出售书籍") # x轴标签
plt.ylabel("价格(¥)") # y轴标签

6. plt.tight_layout()

        处理标题遮挡

(二)多个子图

1. plt.subplots()

创建多个子图

fig,axes=plt.subplots(2,2) # 画布子图分区(2*2个区域)
ax1=axes[0,0] # 设置子图1在0,0的位置(其中,0,0表示从左往右,逐行排序的第1个位置)
ax1.plot([1,2,3,4,5], [1,2,3,4,5]) # 子图数据
ax2=axes[0,1] # 设置分区2在0,1的位置(其中,0,1表示从左往右,逐行排序的第2个位置)
ax2.plot([1,3,5,7,9], [-1,2,-3,4,-5]) # 子图数据
ax2.grid(color='g', linestyle='--', linewidth=1,alpha=0.3) # 子图样式
ax2.legend(prop={'size': 10})
plt.show()

2. figure对象的add_subplots

创建多个子图(固定行列)

fig = plt.figure(figsize=(5,3), facecolor='pink') # 创建图形对象。figsize设置画布宽高;facecolor设置背景色
ax1 = fig.add_subplot(2,2,1) # 第一个位置
ax1.plot([1,2,3,4,5], [1,2,3,4,5]) # 分区1数据
ax2 = fig.add_subplot(2,2,4) # 第四个位置
ax2.plot([1,2,3,4,5], [-1,-2,-3,-4,-5]) # 分区2数据
plt.show()

3. figure对象的add_axes

创建多个子图(百分比布局)

fig = plt.figure() # 创建图形对象
ax1=fig.add_subplot(1,2,2) # 设置主图1*2的第2个位置
ax1.plot([1,2,3,4,5], [1,2,3,4,5]) # 数据 
ax1.set_title('主图') # 标题
ax2 = fig.add_axes([0.64,0.68,0.1,0.1]) # 设置子图,add_axes中阵列含义:[距离左64%,距离底68%,宽10%,高10%]
ax2.plot([0.1,0.2,0.3,0.4,0.5], [0.1,0.2,0.3,0.4,0.5], 'r') # 数据
ax2.set_title('图中图') # 标题
plt.show()

4. 设置子图样式

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.set_title('Matplotlib demo') # 标题
ax1.set_xlabel('书籍') # 设置子图的x轴标签
ax1.set_ylabel('价格') # 设置子图的y轴标签
# ax1.set_xticks([1, 2, 3]) # 设置x轴刻度
ax1.set_yticks([0,20,40,60,80])  # 设置y轴刻度
# ax1.set_xlim(0,100) # 设置x轴取值范围
ax1.set_ylim(0,100) # 设置y轴取值范围
ax1.set_xticklabels(['科幻','教育','文学']) # 设置 x 轴刻度标签

(二)图形实例

1. 折线图 plot

(1)代码
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
def get_data():
    books = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']  # x轴的数据
    prices = [40,10,60,80] # y轴的数据
    actual_prices = [50,95,80,45] # y轴的数据
    plt.plot(books, prices, color='red', marker='o', linestyle='--', label='预售价') # 画图
    plt.plot(books, actual_prices, color='blue', marker='.', linestyle='solid', label='实际售价') # 画图
    plt.title("Matplotlib demo") # 图表标题
    plt.xlabel("出售书籍") # x轴轴标签
    plt.ylabel("价格(¥)") # y轴轴标签
    plt.ylim(20,100) # 控制Y轴的显示范围
    plt.legend(loc='upper left')  # 显示图例(一定要在plot的后面)
    plt.xticks(list(books)[::3], rotation=45) # 设置x轴刻度样式:[::3] 间隔3个显示一次;rotation 文字旋转度数;fontproperties设置中文字体
    plt.show()

if __name__ == "__main__":
    get_data()
(2)效果图

2. 条形图 bar

(1)代码
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
def get_data():
    fig, ax = plt.subplots(figsize=(4,3), layout='constrained')
    books = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']  # 横坐标的数据
    prices = [40,10,60,80] # 纵坐标的数据
    ax.set(ylim=(0, 90))
    ax.bar(books, prices)
    plt.show()
if __name__ == "__main__":
    get_data()
(2)效果图

3. 饼图 pie

(1)代码
pie_data = [10, 20, 30, 80]
colors = plt.get_cmap('Blues')(np.linspace(0.2, 0.9, len(pie_data))) # 根据饼图数据设置渐变颜色
fig, ax = plt.subplots()
labels = ['科幻', '科学', '文学', '教育']
wedges, texts, autotexts = ax.pie(pie_data, # 饼图数据
                                colors=colors, # 饼图渐变色
                                radius=3, # 饼图半径
                                center=(4, 4), # 饼图的圆中心位置
                                wedgeprops={"linewidth": 1, "edgecolor": "white"}, # 分块边界线样式
                                frame=True, # 显示坐标轴
                                textprops=dict(color='r'), # 文本颜色
                                labels=labels, # 显示每块标题标签
                                autopct='%.2f%%', # 展示每块百分比值;若要用autopct属性,则pie()方法回传的变量有三个
                                shadow=True, # 显示阴影
                                startangle=30 # 分块起始角度(x轴正向计算度数,逆时针)
                            ) 
ax.set(xlim=(0, 8), xticks=np.arange(1, 8), # 设置x轴的刻度范围
        ylim=(0, 8), yticks=np.arange(1, 8)) # 设置y轴的刻度范围
ax.legend(wedges, # 图例的标签颜色
            labels, # 图例的标签数据
            title="demo", # 图例标题
            loc="center left",
            bbox_to_anchor=(1, 0.5, 0, 0) # (x, y, width, height)
            ) # 图例
plt.show()
(4)效果图


4. 折线图&条形图

(1)代码
books = ['数据结构', '数据库原理', '操作系统', '计算机组成原理']  # x轴的数据
prices = [40,10,60,80] # y轴的数据
actual_prices = [50,95,80,45] # y轴的数据
plt.plot(books, prices, color='red', marker='o', linestyle='--', label='预售价') # 折线图
plt.bar(books, actual_prices, color='blue', label='实际售价') # 条形图
plt.title("Matplotlib demo") # 图表标题
plt.xlabel("出售书籍") # x轴轴标签
plt.ylabel("价格(¥)") # y轴轴标签
plt.ylim(0,100) # 控制Y轴的显示范围
plt.legend(loc='upper left')  # 显示图例(一定要在plot的后面)
plt.xticks(list(books)[::1], rotation=0) # 设置x轴刻度样式:[::1] 间隔1个显示一次;rotation 文字旋转度数;fontproperties设置中文字体
plt.show()
(2)效果图

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Traceback (most recent call last): File "D:\PythonProject\数据分析\plot.py", line 39, in <module> dfgroup2.plot(kind="bar") File "D:\anaconda3\lib\site-packages\pandas\plotting\_core.py", line 1000, in __call__ return plot_backend.plot(data, kind=kind, **kwargs) File "D:\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\__init__.py", line 71, in plot plot_obj.generate() File "D:\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 451, in generate self._setup_subplots() File "D:\anaconda3\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 512, in _setup_subplots fig = self.plt.figure(figsize=self.figsize) File "D:\anaconda3\lib\site-packages\matplotlib\_api\deprecation.py", line 454, in wrapper return func(*args, **kwargs) File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 813, in figure manager = new_figure_manager( File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 382, in new_figure_manager _warn_if_gui_out_of_main_thread() File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 360, in _warn_if_gui_out_of_main_thread if _get_required_interactive_framework(_get_backend_mod()): File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 208, in _get_backend_mod switch_backend(rcParams._get("backend")) File "D:\anaconda3\lib\site-packages\matplotlib\pyplot.py", line 331, in switch_backend manager_pyplot_show = vars(manager_class).get("pyplot_show") TypeError: vars() argument must have __dict__ attribute
06-06

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值