我有一个问题试图让我的日期刻度在matplotlib中旋转.下面是一个小样本程序.如果我尝试在末尾旋转刻度线,则刻度线不会旋转.如果我尝试旋转注释'崩溃'下显示的刻度,则matplot lib崩溃.
只有当x值是日期时才会发生这种情况.如果我用调用中dates的变量替换变量,则调用在内部工作正常.tavail_plotxticks(rotation=70)avail_plot
有任何想法吗?
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
def avail_plot(ax, x, y, label, lcolor):
ax.plot(x,y,'b')
ax.set_ylabel(label, rotation='horizontal', color=lcolor)
ax.get_yaxis().set_ticks([])
#crashes
#plt.xticks(rotation=70)
ax2 = ax.twinx()
ax2.plot(x, [1 for a in y], 'b')
ax2.get_yaxis().set_ticks([])
ax2.set_ylabel('testing')
f, axs = plt.subplots(2, sharex=True, sharey=True)
t = np.arange(0.01, 5, 1)
s1 = np.exp(t)
start = dt.datetime.now()
dates=[]
for val in t:
next_val = start + dt.timedelta(0,val)
dates.append(next_val)
start = next_val
avail_plot(axs[0], dates, …Run Code Online (Sandbox Code Playgroud) 检查下图的x轴.如何将标签向左移动一点,使它们与各自的刻度对齐?
我正在使用以下方式旋转标签:
ax.set_xticks(xlabels_positions)
ax.set_xticklabels(xlabels, rotation=45)
Run Code Online (Sandbox Code Playgroud)
但是,正如您所看到的,旋转以文本标签的中间为中心.这使它看起来像是向右移动了.
我试过用这个代替:
ax.set_xticklabels(xlabels, rotation=45, rotation_mode="anchor")
Run Code Online (Sandbox Code Playgroud)
......但它没有按照我的意愿行事.并且"anchor"似乎是rotation_mode参数允许的唯一值.

我试图将子图(使用GridSpec创建)的x标签旋转45度。我尝试使用axa.set_xticks()和axa.set_xticklabels,但似乎无法正常工作。谷歌也没有提供帮助,因为大多数与标签有关的问题都是关于正常绘图而不是子图。
参见下面的代码:
width = 20 # Width of the figure in centimeters
height = 15 # Height of the figure in centimeters
w = width * 0.393701 # Conversion to inches
h = height * 0.393701 # Conversion to inches
f1 = plt.figure(figsize=[w,h])
gs = gridspec.GridSpec(1, 7, width_ratios = [1.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
axa = plt.subplot(gs[0])
axa.plot(dts, z,'k', alpha=0.75, lw=0.25)
#axa.set_title('...')
axa.set_ylabel('TVDSS ' + '$[m]$', fontsize = '10' )
axa.set_xlabel('slowness 'r'$[\mu s/m]$', fontsize …Run Code Online (Sandbox Code Playgroud) 在 Thomas 非常有帮助地解决了我在这个问题中制作两个寄生虫子图的问题之后,我现在尝试旋转子图上的 x 轴标签。
不幸的是,我对这里示例代码的修改似乎对 x 轴标签没有影响:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
host = host_subplot(111, axes_class=AA.Axes)
plt.subplots_adjust(right=0.75)
par1 = host.twinx()
par2 = host.twinx()
offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right",
axes=par2,
offset=(offset, 0))
par1.axis["right"].toggle(all=True)
par2.axis["right"].toggle(all=True)
host.set_xlim(0, 2)
host.set_ylim(0, 2)
host.set_xlabel("Distance")
host.set_ylabel("Density")
par1.set_ylabel("Temperature")
par2.set_ylabel("Velocity")
p1, = host.plot([0, 1, 2], [0, 1, 2], label="Density")
p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature")
p3, = par2.plot([0, …Run Code Online (Sandbox Code Playgroud) 我下面的代码生成了一张图,其中x轴上的标签被压在一起并且难以阅读。我怎样才能每隔两年而不是全部显示?
import seaborn as sns
import pandas as pd
years = list(range(1996,2017))
count = [2554.9425,2246.3233,1343.7322,973.9502,706.9818,702.0039,725.9288,
598.7818,579.0219,485.8281,474.9578,358.1385,311.4344,226.3332,
161.4288,132.7368,78.1659,39.8121,23.1321,0.2232,0.0015]
df = pd.DataFrame({'year':years, 'count':count})
dot_size = 0.7
ax = sns.pointplot(x="year",y="count", scale = dot_size, data=df)
ax.set(xlabel='Year', ylabel='Amount')
ax.set(ylim=(0, 3000))
Run Code Online (Sandbox Code Playgroud)
我有两个不同的数据框,每个数据框有 19 个变量,我正在用每个变量的直方图绘制一个多重图,如下所示:
fig, ax = plt.subplots(figsize=(19,10), dpi=50)
dataframe1.hist(ax=ax, layout=(3,7), alpha=0.5)
fig, ax = plt.subplots(figsize=(19,10), dpi=50)
dataframe2.hist(ax=ax, layout=(3,7), alpha=0.5)
Run Code Online (Sandbox Code Playgroud)
这会产生两个内部有 19 个直方图的图像。我想尝试的是在同一个子图中仅绘制一个具有共享直方图的图像。
我试过这个:
fig, ax = plt.subplots(figsize=(19,10), dpi=50)
dataframe1.hist(ax=ax, layout=(3,7), alpha=0.5, label='x')
dataframe2.hist(ax=ax, layout=(3,7), alpha=0.5, label='y', color='red')
Run Code Online (Sandbox Code Playgroud)
但它只画了最后一张。这是一个类似的例子:使用 matplotlib同时绘制两个直方图,但我如何将它应用于我的 19 个子图?
任何想法都会受到欢迎,提前致谢!
PS:我目前正在使用带有%matplotlib notebook选项的Jupyter Notebooks
我有一个看起来像这样的图(这是著名的 Wine 数据集):
正如您所看到的,x 轴标签重叠,因此我需要旋转。
注意!我对旋转 x 刻度不感兴趣(如此处所述),但对标签文本(即alcohol、malic_acid等)感兴趣。
创建绘图的逻辑如下:我使用 创建一个网格axd = fig.subplot_mosaic(...),然后为底部绘图设置标签axd[...].set_xlabel("something")。set_xlabel如果能接受一个参数那就太好了rotation,但不幸的是事实并非如此。
我正在尝试旋转每个子图的 x 轴标签。这是我的代码:
fig.set_figheight(10)
fig.set_figwidth(20)
ax.set_xticklabels(dr_2012['State/UT'], rotation = 90)
ax[0, 0].bar(dr_2012['State/UT'], dr_2012['Primary Total'])
ax[0, 0].set_title('Dropout Ratios 2012-2013 (Primary)')
ax[0, 1].bar(dr_2012['State/UT'], dr_2012['Upper Primary Total'])
ax[0, 1].set_title('Dropout Ratios 2012-2013 (Upper Primary)')
ax[1, 0].bar(dr_2012['State/UT'], dr_2012['Secondary Total'])
ax[1, 0].set_title('Dropout Ratios 2012-2013 (Secondary)')
ax[1, 1].bar(dr_2012['State/UT'], dr_2012['HS Total'])
ax[1, 1].set_title('Dropout Ratios 2012-2013 (HS)')
Run Code Online (Sandbox Code Playgroud)

平常的事情似乎都不适合我。我尝试过 ax.set_xticklabels 和 ax.tick_params。我还尝试使用 ax.get_xticklabels 循环遍历刻度,但即使这样也不起作用。它总是给我这个错误 -
AttributeError: 'numpy.ndarray' object has no attribute 'set_xticklabels'/'get_xticklabels'/'tick_params'
Run Code Online (Sandbox Code Playgroud)
我很茫然。为什么它不起作用?