【问题标题】:How to a handle a large number of axis labels?如何处理大量轴标签?
【发布时间】:2021-01-01 10:40:35
【问题描述】:

作为初学者,这是我第一次使用更大的数据集进行聚类。有人可以帮我解决这个问题。
这是我的代码:

df1=BAR[['symbol','average_price']]  
plt.figure(figsize=(40,30))  
plt.scatter(df1['symbol'],df1['average_price']) 
plt.xlabel('SYMBOL',fontsize=15) 
plt.ylabel('AVERAGE_PRICE',fontsize=15)  
plt.xticks(rotation=90,fontsize=12)    
plt.show()

这是我的散点图:

【问题讨论】:

  • 你有多少个独特的符号?
  • 这是 505 个独特的符号
  • 要全部显示在图上吗?
  • 不,不是必须的!但是,我只是想知道将来如何处理这些情节。是否有任何方法或方式可以处理这些类型的带有较大唯一 xticks 符号的图?

标签: python matplotlib data-visualization axis-labels xticks


【解决方案1】:

一个简单的选择是更改图形大小并使其变得非常大(就像您所做的那样)。或者你也可以改变比例,让这个数字变得非常宽泛。 但对我来说,我只看到不使用交互式后端但例如使用Agg 的效果。如果您保存该图并查看png 文件,您可以看到额外的空间。 我倾向于做的另一件事是以更智能的方式排列标签以更好地利用空间。

例如,您可以将每隔一个标签向下移动并绘制一个更长的刻度,在我看来这看起来不那么拥挤。

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt

def change_tick_length(ax, i, size):
    h = ax.xaxis.get_majorticklines()
    i = np.ravel_multi_index((i, 0), (len(h)//2, 2))
    h[i].set_markersize(size)


n = 200
new_tick_length = 70
n_whitespace = int(new_tick_length / 3.3)  # found this ratio works for me

labels = [f"Dummy{i}" for i in range(n)]

fig = plt.figure(figsize=(40, 15))
ax = fig.subplots()
fig.subplots_adjust(bottom=0.3)
ax.plot(range(n))
ax.set_xticks(range(n))

for i, l in enumerate(labels):
    if i % 2 == 0:
        labels[i] = f"{l}{' ' * n_whitespace}"
        change_tick_length(ax=ax, i=i, size=new_tick_length)

ax.set_xticklabels(labels, rotation=90)
plt.savefig('dummy')

【讨论】:

  • 真是个好主意!!谢谢你的朋友的帮助。它真的很有帮助。
  • 很高兴我能帮上忙,也考虑支持这个问题:)
猜你喜欢
  • 2017-12-14
  • 2015-08-16
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多