前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matplotlib散点图常见问题及解决方案

matplotlib散点图常见问题及解决方案

作者头像
不止于python
发布2023-11-17 14:04:38
1910
发布2023-11-17 14:04:38
举报
文章被收录于专栏:不止于python不止于python

自定义横纵坐标科学计数法格式

坐标刻度如果太大或者太小, 默认就会显示科学计数法, 但是科学计数法却不是自己想要的格式, 通过以下方式即可自定义

复现代码如下

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date:   2023-11-16 19:55:02
# @Last Modified by:   Mehaei
# @Last Modified time: 2023-11-16 19:55:31
import matplotlib.pyplot as plt


def main():
    x = range(1000000, 9000000, 100000)
    y = range(10000000, 90000000, 1000000)
    plt.scatter(x, y)
    plt.show()


main()

效果图

使用下面方法可以自定义刻度显示的格式

解决代码如下

代码语言:javascript
复制
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter


def formatnum(x, pos):
    return "{:.1e}".format(x)


formatter = FuncFormatter(formatnum)


def main():
    x = range(1000000, 9000000, 100000)
    y = range(10000000, 90000000, 1000000)
    plt.scatter(x, y)
    plt.gca().yaxis.set_major_formatter(formatter)
    plt.gca().xaxis.set_major_formatter(formatter)
    plt.show()


main()

效果图

显示中文(添加自定义字体)

代码语言:javascript
复制
def main():
    x = range(1000000, 9000000, 100000)
    y = range(10000000, 90000000, 1000000)
    plt.scatter(x, y)
    plt.title("中文标题")
    plt.xlabel("x轴")
    plt.ylabel("y轴")
    plt.show()

效果图

添加字体对象, 将字体对象添加到需要显示中文的地方

代码语言:javascript
复制
from matplotlib.font_manager import FontProperties


font = FontProperties(fname="97txj03p17q39w692ecpjely52o1v6z9.ttf", size=30)
xyfont = FontProperties(fname="97txj03p17q39w692ecpjely52o1v6z9.ttf", size=15)


def main():
    x = range(1000000, 9000000, 100000)
    y = range(10000000, 90000000, 1000000)
    plt.scatter(x, y)
    plt.title("中文标题", fontproperties=font)
    plt.xlabel("x轴", fontproperties=xyfont)
    plt.ylabel("y轴", fontproperties=xyfont)
    plt.show()

可以为x和y轴设置不同的字体, 当然也有其它方式,比如: 设置全局字体, 将字体放入安装包内等

效果图

其它问题

最后直接放完整代码了, 功能和解决方案都在注释里了

代码语言:javascript
复制
# -*- coding: utf-8 -*-
# @Author: Mehaei
# @Date:   2023-11-16 19:55:02
# @Last Modified by:   Mehaei
# @Last Modified time: 2023-11-16 21:40:04
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="97txj03p17q39w692ecpjely52o1v6z9.ttf", size=30)
xyfont = FontProperties(fname="97txj03p17q39w692ecpjely52o1v6z9.ttf", size=15)


def formatnum(x, pos):
    """
    格式化刻度
    """
    return "{:.1e}".format(x)


formatter = FuncFormatter(formatnum)


def main():
    """
    生成散点图
    """
    x = range(1000000, 9000000, 100000)
    y = range(10000000, 90000000, 1000000)
    yy = range(10000000, 50000000, 500000)
    # 图例显示为点(默认)
    plt.scatter(x, y, label="图例1")
    # 添加多条y轴
    plt.scatter(x, yy, label="图例2")
    # 图例显示为横线
    # plt.scatter(x, y)
    # plt.plot([], [], label="图例1")
    # plt.scatter(x, yy)
    # plt.plot([], [], label="图例2")
    # 设置标题和x轴和y轴标题字体和大小
    plt.title("中文标题", fontproperties=font)
    plt.xlabel("x轴", fontproperties=xyfont)
    plt.ylabel("y轴", fontproperties=xyfont)
    # 设置x轴和y轴字体大小
    plt.xticks(fontproperties=xyfont)
    plt.yticks(fontproperties=xyfont)
    # 取消上边框和右边框
    plt.gca().spines['top'].set_visible(False)
    plt.gca().spines['right'].set_visible(False)
    # 添加文字
    plt.text(1, 1, "注意\n测试", horizontalalignment="right", verticalalignment="top", transform=plt.gca().transAxes, fontproperties=xyfont)
    # 自定义坐标刻度值
    # plt.gca().yaxis.set_major_formatter(formatter)
    # plt.gca().xaxis.set_major_formatter(formatter)
    # 添加图例
    plt.legend(loc="upper left", title_fontsize="medium", fontsize="medium", prop=xyfont)
    # 显示
    plt.show()
    # 保存图片
    """
    dpi: 像素
    bbox_inches: 图表紧凑型(旁边不留那么多空白)
    """
    # plt.savefig("test.png", dpi=200, bbox_inches="tight")
    # 清空画布
    plt.cla()


main()

到这里就可以解决大部分问题了, 其它问题一搜就知道怎么解决了

最终效果图

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不止于python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自定义横纵坐标科学计数法格式
  • 效果图
  • 显示中文(添加自定义字体)
  • 其它问题
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档