需求
参考官网:Scales — Matplotlib 3.4.3 documentation
常规画图时,有时候对X轴或者Y轴,希望某个区域可以放大,某个区域可以缩小。
方法:
可以尝试ax.set_xscale()??ax.set_yscale()
目前已有的方法是:"linear", "log", "symlog", "logit"
但是除了以上,还可以自定义函数
实例:
X轴范围0-100,希望一半区域是0-10,另外一半是10-100
forward和inverse是比例转换及其逆的方法(具体这里为啥是m3,我还是不明白,但是勉强可以实现自己的目的)
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import NullFormatter, FixedLocator
def forward(x):
return x**(1/3)
def inverse(x):
return x**3
data = np.random.randint(0,100,size=100)
sns.set(style='dark')
fig, axs = plt.subplots(1, 1 ,figsize=(6, 6),constrained_layout=True)
ax = axs
ax.violinplot(data, showmeans=False, showmedians=False, vert=False, showextrema=False)
ax.boxplot(data, vert=False, showfliers=False)
ax.axvline(0, -1, 1, linestyle='-', color='grey', linewidth=0.5)
ax.axvline(10, -1, 1, linestyle='-', color='grey', linewidth=0.5)
ax.axvline(100, -1, 1, linestyle='-', color='grey', linewidth=0.5)
##x轴缩放设置
ax.set_xscale("function",functions=(forward, inverse))
ax.xaxis.set_major_locator(FixedLocator((0,10,100)))
###设置XY轴标签
plt.xlabel("test")
plt.ylabel("hhh")
plt.xlim(0,101)
###去掉边框线
ax = plt.subplot()
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
plt.show()
结果:
?
|