matplotlib 如何创建具有不同间隔的xtick?

vmjh9lq9  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(258)

我正在使用matplotlib绘制一个折线图,如下所示。

  1. import matplotlib.pyplot as plt
  2. import pandas as pd
  3. import io
  4. temp = u"""
  5. tenor,yield
  6. 1M,5.381
  7. 3M,5.451
  8. 6M,5.505
  9. 1Y,5.393
  10. 5Y,4.255
  11. 10Y,4.109
  12. """
  13. data = pd.read_csv(io.StringIO(temp), sep=",")
  14. plt.plot(data['tenor'], data['yield'])

字符串
输出:x轴上的刻度间隔都相同。


的数据
我想要的:设置不同的x轴的刻度间隔,如下面的屏幕所示
有没有办法设置不同的tick intvel?


wwwo4jvm

wwwo4jvm1#

在列'tenor'中,'M'表示月份,'Y'表示年份。创建一个'Month'列,其中'Y'按12个月缩放。
直接使用pandas.DataFrame.plot绘制data,并使用.set_xticks更改xtick-labels,会更简洁。

python 3.12.0pandas 2.1.1matplotlib 3.8.0中测试

  1. data = pd.read_csv(io.StringIO(temp), sep=",")
  2. # Add a column "Month" from the the column "tenor"
  3. data["Month"] = data['tenor'].apply(lambda x : int(x[:-1]) *12 if 'Y' in x else int(x[:-1]))
  4. # plot yield vs Month
  5. ax = data.plot(x='Month', y='yield', figsize=(17, 5), legend=False)
  6. # set the xticklabels
  7. _ = ax.set_xticks(data.Month, data.tenor)

字符串
输出:
x1c 0d1x的数据

.applylambda函数最快

  • 给定600万行
  1. data = pd.DataFrame({'tenor': ['1M', '3M', '6M', '1Y', '5Y', '10Y'] * 1000000})

%timeit实现对比

  • .applylambda
  1. %timeit data['tenor'].apply(lambda x: int(x[:-1]) *12 if 'Y' in x else int(x[:-1]))
  2. 2 s ± 50.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

  • .apply函数调用
  1. def scale(x):
  2. v = int(x[:-1])
  3. return v * 12 if 'Y' in x else v
  4. %timeit data['tenor'].apply(scale)
  5. 2.02 s ± 20.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

  • 矢量化np.whereassignment expression
  1. %timeit np.where(data.tenor.str.contains('Y'), (v := data.tenor.str[:-1].astype(int)) * 12 , v)
  2. 2.44 s ± 26.1 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

  • 矢量化np.where,无assignment expression
  1. %timeit np.where(data.tenor.str.contains('Y'), data.tenor.str[:-1].astype(int) * 12 , data.tenor.str[:-1].astype(int))
  2. 3.36 s ± 5.38 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

展开查看全部

相关问题