自定义横纵坐标科学计数法格式
坐标刻度如果太大或者太小, 默认就会显示科学计数法, 但是科学计数法却不是自己想要的格式, 通过以下方式即可自定义
复现代码如下
代码语言: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()
到这里就可以解决大部分问题了, 其它问题一搜就知道怎么解决了
最终效果图