解决python统计图ticks覆盖的问题

在使用python绘制条形图的时候发现横轴的tick有覆盖的问题。

绘制条形图的方法:seaborn的barplot,以及matplotlib自带的plt.bar。
绘制结果:如下图所示
解决python统计图ticks覆盖的问题_第1张图片
解决python统计图ticks覆盖的问题_第2张图片

可以发现:

sseaborn和plt.bar在这个例子上绘图上区别不是很大,但是通常seaborn可以画出比plt更加灵活的统计图。横轴由于是时间string,因此有所覆盖。

解决办法:

  1. 如果你的横轴数量不多,可以考虑将figure size调整一下
    语句:plt.figure(1,figsize=(7,5)) 7和5是我在这个例子适当调整的,(a,b)中a代表横轴,b代表纵轴。
  2. 减少横轴显示的tick数量

语句:

ax = plt.gca()
for ind, label in enumerate(ax.xaxis.get_ticklabels()):
    if ind % 4 == 0:  # every 10th label is kept
        label.set_visible(True)
    else:
        label.set_visible(False)

效果
解决python统计图ticks覆盖的问题_第3张图片
解决python统计图ticks覆盖的问题_第4张图片

  1. 倾斜坐标轴
ax = plt.gca()
for label in ax.xaxis.get_ticklabels():
    label.set_rotation(45)

解决python统计图ticks覆盖的问题_第5张图片
解决python统计图ticks覆盖的问题_第6张图片

所有的测试代码如下:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import datetime

sns.set_style("whitegrid")
# tips = sns.load_dataset("tips")

day = []
for interval in range(20):
    day.append((datetime.date.today() + datetime.timedelta(days=interval)).strftime("%Y-%m-%d"))
#print(date)

total_bill = 2 * np.arange(20)

fig1 = plt.figure(1,figsize=(7,5))
ax = sns.barplot(x=day, y=total_bill,errwidth=1, errcolor='b',linewidth = 0,palette="Blues_d") #, data=tips)
for ind, label in enumerate(ax.xaxis.get_ticklabels()):
    if ind % 4 == 0:  # every 10th label is kept
        label.set_visible(True)
    else:
        label.set_visible(False)
#df.index = pd.to_datetime(df.index)  # 将字符串索引转换成时间索引
#datanames = ['day','total_bill']
df = pd.DataFrame()
df['day'] = day
df['total_bill'] = total_bill
print(df)
fig2 = plt.figure(2,figsize=(7,5))
plt.bar(np.arange(20),df['total_bill'],linewidth = 0)

plt.xticks(np.arange(20), df['day'])
ax = plt.gca()

for ind, label in enumerate(ax.xaxis.get_ticklabels()):
    if ind % 4 == 0:  # every 10th label is kept
        label.set_visible(True)
    else:
        label.set_visible(False)

plt.show()

你可能感兴趣的:(python学习,统计,大数据)