我有一些数据,基于此我试图在seaborn中建立一个计数图。所以我做了这样的事情:
aPost.tags
并获取我的countplot:
问题是x轴上的刻度太密集(这使得它们无用)。我尝试用data = np.hstack((np.random.normal(10, 5, 10000), np.random.normal(30, 8, 10000))).astype(int)
plot_ = sns.countplot(data)
降低密度,但没有帮助。
还有一种方法可以用一种颜色制作图表吗?
答案 0 :(得分:9)
这里似乎有多个问题:
plt.xticks()
)试试这个:
for ind, label in enumerate(plot_.get_xticklabels()):
if ind % 10 == 0: # every 10th label is kept
label.set_visible(True)
else:
label.set_visible(False)
我认为数据设置在这种类型的情节中并不是最佳选择。 Seaborn将每个独特的价值解释为新的类别并引入新的颜色。如果我正确的话,颜色数和x-ticks数等于np.unique(数据)的数量。
将您的数据与seaborn的示例进行比较(这些示例均基于可导入的数据进行检查)。
我还认为使用pabas数据帧更容易使用seaborn(而不是numpy数组;我经常以错误的方式准备我的数据,并且子集选择需要预处理;数据帧提供更多)。我认为大多数seaborn的例子都使用这种数据输入。
答案 1 :(得分:1)
作为对已接受答案的略微修改,我们通常根据标签的值(而不是索引)来选择标签,例如仅显示可以被10整除的值,这将起作用:
for label in plot_.get_xticklabels():
if np.int(label.get_text()) % 10 == 0:
label.set_visible(True)
else:
label.set_visible(False)
答案 2 :(得分:1)
即使已经回答了一段时间,但添加了另一个可能更简单,更灵活的选择。
您可以使用matplotlib axis tick locator来控制显示哪些报价。
在此示例中,您可以使用LinearLocator
来实现同一目的:
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.ticker as ticker
data = np.hstack((np.random.normal(10, 5, 10000), np.random.normal(30, 8, 10000))).astype(int)
plot_ = sns.countplot(data)
plot_.xaxis.set_major_locator(ticker.LinearLocator(10))
答案 3 :(得分:0)
自从您标记了matplotlib
以来,一种不同于将刻度线设置为可见的True/False
的解决方案是按照以下方式绘制第n
个标签
fig = plt.figure(); np.random.seed(123)
data = np.hstack((np.random.normal(10, 5, 10000), np.random.normal(30, 8, 10000))).astype(int)
plot_ = sns.countplot(data)
fig.canvas.draw()
new_ticks = [i.get_text() for i in plot_.get_xticklabels()]
plt.xticks(range(0, len(new_ticks), 10), new_ticks[::10])