如何在图表上漂亮地打印标签

时间:2020-10-07 16:55:28

标签: python pandas seaborn

我有这个数据框:

{'date': {0: Timestamp('2019-10-31 00:00:00'),
  1: Timestamp('2019-11-30 00:00:00'),
  2: Timestamp('2019-12-31 00:00:00'),
  3: Timestamp('2020-01-31 00:00:00'),
  4: Timestamp('2020-02-29 00:00:00'),
  5: Timestamp('2020-03-31 00:00:00'),
  6: Timestamp('2020-04-30 00:00:00'),
  7: Timestamp('2020-05-31 00:00:00'),
  8: Timestamp('2020-06-30 00:00:00'),
  9: Timestamp('2020-07-31 00:00:00'),
  10: Timestamp('2020-08-31 00:00:00')},
 'rate': {0: 100.0,
  1: 99.04595078851037,
  2: 101.09797599729458,
  3: 102.29581878702609,
  4: 104.72409825791058,
  5: 109.45297539163114,
  6: 118.24943699089361,
  7: 119.65432196709045,
  8: 117.82108184647535,
  9: 118.6223497519237,
  10: 120.32838345607335}}

当我绘制它时,x轴被堵塞 enter image description here

如何打印它,以便在x轴上获得月份名称,年份。例如19年11月。

我正在用它来绘图

chart = sns.lineplot('date', 'rate', data=cdf,marker="o")

如果添加更多数据点,即使更改大小也不会显示它们: enter image description here

enter image description here

数据:

{'date': {0: Timestamp('2019-01-31 00:00:00'),
  1: Timestamp('2019-02-28 00:00:00'),
  2: Timestamp('2019-03-31 00:00:00'),
  3: Timestamp('2019-04-30 00:00:00'),
  4: Timestamp('2019-05-31 00:00:00'),
  5: Timestamp('2019-06-30 00:00:00'),
  6: Timestamp('2019-07-31 00:00:00'),
  7: Timestamp('2019-08-31 00:00:00'),
  8: Timestamp('2019-09-30 00:00:00'),
  9: Timestamp('2019-10-31 00:00:00'),
  10: Timestamp('2019-11-30 00:00:00'),
  11: Timestamp('2019-12-31 00:00:00'),
  12: Timestamp('2020-01-31 00:00:00'),
  13: Timestamp('2020-02-29 00:00:00'),
  14: Timestamp('2020-03-31 00:00:00'),
  15: Timestamp('2020-04-30 00:00:00'),
  16: Timestamp('2020-05-31 00:00:00'),
  17: Timestamp('2020-06-30 00:00:00'),
  18: Timestamp('2020-07-31 00:00:00')},
 'rate': {0: 100.0,
  1: 98.1580633244672,
  2: 102.03029115707123,
  3: 107.12429902683576,
  4: 112.60187555657997,
  5: 108.10306860500229,
  6: 105.35473845070196,
  7: 105.13286204895526,
  8: 106.11760178061557,
  9: 107.76819930852,
  10: 106.77041938461862,
  11: 108.84840098309556,
  12: 110.29751856107903,
  13: 112.93762886874026,
  14: 118.04947620270883,
  15: 127.80912766377679,
  16: 128.90556903738158,
  17: 126.96768455091889,
  18: 127.95060601426769}}

我已经发布了更新的数据。

1 个答案:

答案 0 :(得分:1)

from pandas import Timestamp
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt


df = pd.DataFrame(
                 {'date':
                         {0: Timestamp('2019-10-31 00:00:00'),
                          1: Timestamp('2019-11-30 00:00:00'),
                          2: Timestamp('2019-12-31 00:00:00'),
                          3: Timestamp('2020-01-31 00:00:00'),
                          4: Timestamp('2020-02-29 00:00:00'),
                          5: Timestamp('2020-03-31 00:00:00'),
                          6: Timestamp('2020-04-30 00:00:00'),
                          7: Timestamp('2020-05-31 00:00:00'),
                          8: Timestamp('2020-06-30 00:00:00'),
                          9: Timestamp('2020-07-31 00:00:00'),
                          10: Timestamp('2020-08-31 00:00:00')},
                 'rate':
                         {0: 100.0,
                          1: 99.04595078851037,
                          2: 101.09797599729458,
                          3: 102.29581878702609,
                          4: 104.72409825791058,
                          5: 109.45297539163114,
                          6: 118.24943699089361,
                          7: 119.65432196709045,
                          8: 117.82108184647535,
                          9: 118.6223497519237,
                          10: 120.32838345607335}})


df['datelabel'] = df['date'].apply(lambda x: x.strftime('%b %d'))
chart = sns.lineplot('date', 'rate', data=df,marker="o")
chart.set_xticklabels(df.datelabel, rotation=45)
plt.show()

plt

这是一种方法: 构建一个lambda函数,将strftime及其目标表示形式应用于日期中的每个记录。

有关日期格式,请参阅:https://strftime.org/

%b-月份作为语言环境的缩写名称。
%d-月份中的一天,为零填充的十进制数字。

我们可以将其另存为一组参考标签,以通过xticklabels应用于图表。

此外,您还可以使用rotation参数旋转标签。