我无法弄清楚如何旋转X轴上的文本.它是一个时间戳,随着样本数量的增加,它们越来越近,直到它们重叠.我想将文本旋转90度,以便样本靠近在一起,它们不重叠.
下面是我的,它工作得很好,除了我无法弄清楚如何旋转X轴文本.
import sys
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import datetime
font = {'family' : 'normal',
'weight' : 'bold',
'size' : 8}
matplotlib.rc('font', **font)
values = open('stats.csv', 'r').readlines()
time = [datetime.datetime.fromtimestamp(float(i.split(',')[0].strip())) for i in values[1:]]
delay = [float(i.split(',')[1].strip()) for i in values[1:]]
plt.plot(time, delay)
plt.grid(b='on')
plt.savefig('test.png')
Run Code Online (Sandbox Code Playgroud) import pylab as plt
x = range(1, 7)
y = (220, 300, 300, 290, 320, 315)
def test(axes):
axes.bar(x,y)
axes.set_xticks(x, [i+100 for i in x])
a = plt.subplot(1,2,1)
test(a)
b = plt.subplot(1,2,2)
test(b)
Run Code Online (Sandbox Code Playgroud)

我期待xlabs为101, 102 ...
然而,如果我切换到使用plt.xticks(x, [i+100 for i in x])并明确重写函数,它的工作原理.
我想沿着x轴水平移动一些刻度标签,而不移动相应的刻度.
更具体地说,当旋转标签时plt.setp,标签文本的中心保持与刻度线对齐.我想将这些标签向右移动,以便标签的近端对齐,如下图所示.

我知道这篇文章和这一个,但答案很有意思组装机,而不是严格的问题的答案.
我的代码:
import matplotlib.pyplot as plt
import numpy as np
import datetime
# my fake data
dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365*5)])
data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3
# creates fig with 2 subplots
fig = plt.figure(figsize=(10.0, 6.0))
ax = plt.subplot2grid((2,1), (0, 0))
ax2 = plt.subplot2grid((2,1), (1, 0))
## plot dates
ax2.plot_date( dates, data )
# rotates labels
plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 )
# try to shift labels …Run Code Online (Sandbox Code Playgroud) 如何在matplotlib中旋转xticklabels以使每个xticklabel之间的间距相等?
例如,使用此代码:
import matplotlib.pyplot as plt
import numpy as np
# Data + parameters
fontsize = 20
t = np.arange(0.0, 6.0, 1)
xticklabels = ['Full', 'token emb', 'char emb', 'char LSTM',
'token LSTM', 'feed forward','ANN']
# Plotting
fig = plt.figure(1)
ax = fig.add_subplot(111)
plt.plot(t, t)
plt.xticks(range(0, len(t) + 1))
ax.tick_params(axis='both', which='major', labelsize=fontsize)
ax.set_xticklabels(xticklabels, rotation = 45)
fig.savefig('test_rotation.png', dpi=300, format='png', bbox_inches='tight')
Run Code Online (Sandbox Code Playgroud)
我获得:
每个xticklabel之间的间距是不相等的.例如,"Full"和"token emb"之间的间距远大于"前馈"和"ANN"之间的间距.
我在Windows 7 SP1 x64 Ultimate上使用Matplotlib 2.0.0和Python 3.5 64位.
我正在尝试为许多国家做一个条形图,我希望名字显示在条形图下方有点旋转.问题是标签之间的空间是不规则的.

这是相关的代码:
plt.bar(i, bar_height, align='center', label=country ,color=cm.jet(1.*counter/float( len(play_list))))
xticks_pos = scipy.arange( len( country_list)) +1
plt.xticks(xticks_pos ,country_list, rotation=45 )
Run Code Online (Sandbox Code Playgroud)
有谁知道解决方案?
谢谢!您的帮助.
基督教
我想在中间有文本的两点之间添加注释,并旋转文本以与线对齐。当前示例未按预期旋转:
import matplotlib.pyplot as plt
import numpy as np
def ann_distance(ax,xyfrom,xyto,text=None):
midx = (xyto[0]+xyfrom[0])/2
midy = (xyto[1]+xyfrom[1])/2
if text is None:
text = str(np.sqrt( (xyfrom[0]-xyto[0])**2 + (xyfrom[1]-xyto[1])**2 ))
ax.annotate("",xyfrom,xyto,arrowprops=dict(arrowstyle='<->'))
p1 = ax.transData.transform_point((xyfrom[0], xyfrom[1]))
p2 = ax.transData.transform_point((xyto[0], xyto[1]))
rotn = np.degrees(np.arctan2(p2[1]-p1[1], p2[0]-p1[0]))
ax.text(midx,midy,text,ha='center', va='bottom',rotation=rotn,fontsize=16)
return
x = np.linspace(0,2*np.pi,100)
width = 800
height = 600
fig, ax = plt.subplots()
ax.plot(x,np.sin(x))
ann_distance(plt.gca(),[np.pi/2,1],[2*np.pi,0],'$sample$')
plt.show()
Run Code Online (Sandbox Code Playgroud)
我正在制作条形图,我想将x轴刻度标签向左移动一个位置.这是情节的代码:
matplotlib.rcParams.update(matplotlib.rcParamsDefault)
plt.style.use(['seaborn-white', 'bmh'])
fig1, ax = plt.subplots()
palette = ['#2a5495', '#07a64c', '#e979ad', '#d88432', '#2a5495',
'#b7040e', '#82c5db', '#b9c09b', '#cd065d', '#4b117f']
x = np.array(df.index)
y = np.array(df.loc[:, 2015])
width = 1.0
lefts = [x * width for x, _ in enumerate(y)]
ax.bar(left = lefts, height = y, width = width, tick_label = x, color = palette, label = ranked_univs)
ax.axis(ymin = 0, ymax = 200, xmin = -0.5, xmax = 9.5)
ax.tick_params(axis='x', which='major', labelsize=8)
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=45)
fig1.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是条形图:
任何线索?