关于#jupyter#的问题,如何解决?

使用的是jupyter notebook 用Matplotlib绘制的条形统计图,
怎么让这些字不重叠,因为是直接用
x=data_sort['name']
y=data_sort['nprg'] 导进去的文字,所以我也不知道怎么调文字大小,用不了fontsize
挤在一起好难认出来,尝试过好多种方法都没用。

img

谢邀!
对于坐标轴上的刻度重叠问题其实除了调整刻度大小来解决以外,还可以通过调节刻度的角度或者调整画板的大小来解决(代码我会放下面的)
如有帮助,请采纳!

我使用的测试代码如下:

import matplotlib.pyplot as plt  

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline

y_3=[11,17,16,11,12,11,12,6,6]
y_10=[26,26,28,19,21,17,16,19,18]
 
x_3=range(1,10)
x_10=range(15,24)
 
plt.figure()
 
plt.scatter(x_3,y_3)
plt.scatter(x_10,y_10)
 
_x=list(x_3)+list(x_10)
_xtick_labels=['3月{}日'.format(i) for i in x_3]
_xtick_labels+=['10月{}日'.format(i-14) for i in x_10]
plt.xticks(_x,_xtick_labels)
 
plt.show()

测试代码结果如下:

img

  1. 调整刻度大小:
    可以使用 plt.tick_params(labelsize=4) 来设置刻度的大小,代码如下:
import matplotlib.pyplot as plt  

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline

y_3=[11,17,16,11,12,11,12,6,6]
y_10=[26,26,28,19,21,17,16,19,18]
 
x_3=range(1,10)
x_10=range(15,24)
 
plt.figure()
 
plt.scatter(x_3,y_3)
plt.scatter(x_10,y_10)
 
_x=list(x_3)+list(x_10)
_xtick_labels=['3月{}日'.format(i) for i in x_3]
_xtick_labels+=['10月{}日'.format(i-14) for i in x_10]
plt.xticks(_x,_xtick_labels)
# TODO 设置刻度大小
plt.tick_params(labelsize=4)
plt.show()

调节刻度大小结果如下:

img


结果其实并不好,下面来尝试其他方法

  1. 调整刻度的角度
    在函数 plt.xticks(_x,_xtick_labels,rotation=90) 中设置刻度和角度
import matplotlib.pyplot as plt  

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline

y_3=[11,17,16,11,12,11,12,6,6]
y_10=[26,26,28,19,21,17,16,19,18]
 
x_3=range(1,10)
x_10=range(15,24)
 
plt.figure()
 
plt.scatter(x_3,y_3)
plt.scatter(x_10,y_10)
 
_x=list(x_3)+list(x_10)
_xtick_labels=['3月{}日'.format(i) for i in x_3]
_xtick_labels+=['10月{}日'.format(i-14) for i in x_10]
# TODO设置x轴刻度和角度
plt.xticks(_x,_xtick_labels,rotation=90)

plt.show()

结果如下:

img

  1. 调整画板大小
    plt.figure(figsize=(20,4)) 设置画板的大小
import matplotlib.pyplot as plt  

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline

y_3=[11,17,16,11,12,11,12,6,6]
y_10=[26,26,28,19,21,17,16,19,18]
 
x_3=range(1,10)
x_10=range(15,24)
 
# TODO 调整画板大小
plt.figure(figsize=(20,4))
 
plt.scatter(x_3,y_3)
plt.scatter(x_10,y_10)
 
_x=list(x_3)+list(x_10)
_xtick_labels=['3月{}日'.format(i) for i in x_3]
_xtick_labels+=['10月{}日'.format(i-14) for i in x_10]

plt.xticks(_x,_xtick_labels)

plt.show()

结果如下:

img

结合使用:

import matplotlib.pyplot as plt  

plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline

y_3=[11,17,16,11,12,11,12,6,6]
y_10=[26,26,28,19,21,17,16,19,18]
 
x_3=range(1,10)
x_10=range(15,24)
# TODO
plt.figure(figsize=(10,8))
 
plt.scatter(x_3,y_3)
plt.scatter(x_10,y_10)
 
_x=list(x_3)+list(x_10)
_xtick_labels=['3月{}日'.format(i) for i in x_3]
_xtick_labels+=['10月{}日'.format(i-14) for i in x_10]
# TODO
plt.xticks(_x,_xtick_labels,rotation=90)
# TODO
plt.tick_params(labelsize=24)
 
plt.show()

结果如下:

img

使用rotation参数旋转标签一定角度就可以了。


plt.xticks(rotation=90) # 旋转90# 或者旋转30°