我希望能够为从Pandas时间序列对象绘制的时间序列图设置主要和次要xticks及其标签.
熊猫0.9"什么是新的"页面说:
"您可以使用to_pydatetime或为Timestamp类型注册转换器"
但我无法弄清楚如何做到这一点,以便我可以使用matplotlib ax.xaxis.set_major_locator和ax.xaxis.set_major_formatter(和次要)命令.
如果我在不转换熊猫时间的情况下使用它们,则x轴刻度和标签最终会出错.
通过使用'xticks'参数,我可以将主刻度传递给pandas.plot,然后设置主刻度标签.我无法弄清楚如何使用这种方法进行次要滴答.(我可以在pandas.plot设置的默认次要刻度上设置标签)
这是我的测试代码:
import pandas
print 'pandas.__version__ is ', pandas.__version__
print 'matplotlib.__version__ is ', matplotlib.__version__
dStart = datetime.datetime(2011,5,1) # 1 May
dEnd = datetime.datetime(2011,7,1) # 1 July
dateIndex = pandas.date_range(start=dStart, end=dEnd, freq='D')
print "1 May to 1 July 2011", dateIndex
testSeries = pandas.Series(data=np.random.randn(len(dateIndex)),
index=dateIndex)
ax = plt.figure(figsize=(7,4), dpi=300).add_subplot(111)
testSeries.plot(ax=ax, style='v-', label='first line')
# using MatPlotLib date time locators and formatters doesn't work with new
# pandas datetime index
ax.xaxis.set_minor_locator(matplotlib.dates.WeekdayLocator(byweekday=(1),
interval=1))
ax.xaxis.set_minor_formatter(matplotlib.dates.DateFormatter('%d\n%a'))
ax.xaxis.grid(True, …Run Code Online (Sandbox Code Playgroud) 背景:
这个问题与 Plotly 相关,但不完全相同:如何检索主要刻度线和网格线的值?。matplotlib也提出了类似的问题,但没有得到解答:How do I show Major ticks as the first day of everymonths and secondary ticks as every day?
Plotly 太棒了,也许唯一困扰我的是自动选择刻度线/网格线以及为 x 轴选择的标签,如下图所示:
地块 1:
我认为这里显示的自然内容是每个月的第一天(当然取决于时期)。或者甚至可能只是每个刻度上的缩写月份名称'Jan'。我意识到由于所有月份的长度并不相同,因此存在技术甚至视觉上的挑战。但有人知道该怎么做吗?
可复制的片段:
import plotly
import cufflinks as cf
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import pandas as pd
import numpy as np
from IPython.display import HTML
from IPython.core.display import display, HTML
import copy
# setup
init_notebook_mode(connected=True)
np.random.seed(123)
cf.set_config_file(theme='pearl')
# Random data using …Run Code Online (Sandbox Code Playgroud) 该问题与我之前询问的“ matplotlib:更改网格间隔并指定刻度标签 ”有关,但现在我想更改x和y轴的比例。当我设置x和y轴的范围,然后指定主要和次要刻度线的间隔时,它将强制x和y轴相同。
这是我的代码。
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
for key, value in sorted(data.items()):
x = value[0][2]
y = value[0][3]
count = value[0][4]
ax.annotate(count, xy = (x, y), size = 3)
plt.suptitle('Number of counts', fontsize = 12)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
# I want max x axis to be 500
ax.set_xlim(0, 501)
# I want max y axis to be 300
ax.set_ylim(0, 301)
# I want major ticks to be every 20 …Run Code Online (Sandbox Code Playgroud)