我正在学习matplotlib通过学习示例来学习,并且在创建单个绘图之前,许多示例似乎包括如下所示的行...
fig, ax = plt.subplots()
Run Code Online (Sandbox Code Playgroud)
这里有些例子...
我看到这个函数用了很多,尽管这个例子只是试图创建一个图表.还有其他一些优势吗?官方演示subplots()也用于f, ax = subplots创建单个图表时,它之后只引用了ax.这是他们使用的代码.
# Just a figure and one subplot
f, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
Run Code Online (Sandbox Code Playgroud) 我长期以来一直使用小子程序来格式化我正在绘制的图表的轴。几个例子:
def format_y_label_thousands(): # format y-axis tick labels formats
ax = plt.gca()
label_format = '{:,.0f}'
ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
def format_y_label_percent(): # format y-axis tick labels formats
ax = plt.gca()
label_format = '{:.1%}'
ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
Run Code Online (Sandbox Code Playgroud)
但是,在昨天更新 matplotlib 后,我在调用这两个函数中的任何一个时收到以下警告:
UserWarning: FixedFormatter should only be used together with FixedLocator
ax.set_yticklabels([label_format.format(x) for x in ax.get_yticks().tolist()])
Run Code Online (Sandbox Code Playgroud)
出现这种警告的原因是什么?我无法弄清楚查看 matplotlib 的文档。
我的python脚本使用matplotlib绘制x,y,z数据集的2D"热图".我的x和y值代表蛋白质中的氨基酸残基,因此只能是整数.当我放大绘图时,它看起来像这样:

正如我所说,xy轴上的浮点值对我的数据没有意义,因此我希望它看起来像这样:

任何想法如何实现这一目标?这是生成图的代码:
def plotDistanceMap(self):
# Read on x,y,z
x = self.currentGraph['xData']
y = self.currentGraph['yData']
X, Y = numpy.meshgrid(x, y)
Z = self.currentGraph['zData']
# Define colormap
cmap = colors.ListedColormap(['blue', 'green', 'orange', 'red'])
cmap.set_under('white')
cmap.set_over('white')
bounds = [1,15,50,80,100]
norm = colors.BoundaryNorm(bounds, cmap.N)
# Draw surface plot
img = self.axes.pcolor(X, Y, Z, cmap=cmap, norm=norm)
self.axes.set_xlim(x.min(), x.max())
self.axes.set_ylim(y.min(), y.max())
self.axes.set_xlabel(self.currentGraph['xTitle'])
self.axes.set_ylabel(self.currentGraph['yTitle'])
# Cosmetics
#matplotlib.rcParams.update({'font.size': 12})
xminorLocator = MultipleLocator(10)
yminorLocator = MultipleLocator(10)
self.axes.xaxis.set_minor_locator(xminorLocator)
self.axes.yaxis.set_minor_locator(yminorLocator)
self.axes.tick_params(direction='out', length=6, width=1)
self.axes.tick_params(which='minor', direction='out', length=3, width=1)
self.axes.xaxis.labelpad = 15 …Run Code Online (Sandbox Code Playgroud) 我想在我创建的绘图上隐藏我的刻度标签,但保持这个刻度本身(轴上的小标记).例如,当我尝试使用我在此处找到的内容时,整个刻度线将被删除,而不仅仅是标签.我怎样才能删除标签呢?
我想用matplotlib绘制这个图.我写了代码,但它没有改变x轴值.
import matplotlib.pyplot as plt
x = [0.00001,0.001,0.01,0.1,0.5,1,5]
y = [0.945,0.885,0.893,0.9,0.996,1.25,1.19]
plt.xlim(0.00001,5)
plt.ylim(0.8,1.4)
plt.plot(x, y, marker='o', linestyle='--', color='r',
label='Square')
plt.xlabel('x')
plt.ylabel('y')
plt.title('compare')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
如何使用matplotlib绘制给定图形的蓝线?
我无法为 seaborn 线图正确设置 x 轴刻度标签。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame({'a':np.random.rand(8),'b':np.random.rand(8)})
sns.set(style="darkgrid")
g = sns.lineplot(data=df)
g.set_xticklabels(['2011','2012','2013','2014','2015','2016','2017','2018'])
Run Code Online (Sandbox Code Playgroud)
x 轴上的年份未正确对齐。
我想知道如果没有任何解析公式,是否有一种方法可以在 Matplotlib 中添加第二个非线性 x 轴。或者简化是否有办法为原始 x 轴中的每个数字创建不同的标签。下图解释了我正在寻找的内容。不幸的是,类似的问题之前已经被问过,但没有得到解答。
我有一系列的日内测量。仅在工作日的白天进行测量。当我绘制数据时,pandas 将 xaxis 扩展到整个时间范围,因此该图显示了数据间隙
dfb.loc[:,("value", "exp_1")].plot()
Run Code Online (Sandbox Code Playgroud)
我可以告诉 pandas/matplotlib 忽略索引并且绘图很好,但我想在 x 轴上显示日期
dfb.loc[:,("value", "exp_1")].plot(ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
我还尝试用我的索引定义 xticks,但这导致第一个图表的 x 轴描述混乱
dfb.loc[:,("value", "exp_1")].plot(xticks=dfb.index)
Run Code Online (Sandbox Code Playgroud)
有没有办法在保持日期的同时获得像第二个图这样的图?
编辑:这是数据和情节的一个子集
这是我上一个问题的另一个问题.我通过以下代码使用facetgrid打印直方图.
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
titanic = sns.load_dataset("titanic")
g= sns.FacetGrid(titanic, col ='survived', size = 3, aspect = 2)
g.map(plt.hist, 'age', color = 'r'), plt.show()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我让seaborn决定垃圾箱标签/值,这就是我想出的
我注意到条形本身并没有一直延伸到标签.所以0-10标签中的第一个条似乎延伸到大约8,而不是完全延伸到10.做一个快速value_count(除非我弄错了),表明第一个条实际上只包括出现到8岁.
然后,我尝试通过此代码更改要包含的容器数量:
g.map(plt.hist, 'age', bins =8, color = 'r'), plt.show()
Run Code Online (Sandbox Code Playgroud)
我知道可以通过手动设置来更改轴标签。(例如:修改刻度标签文本)
然而,这显然只有在你知道你想要什么标签的情况下才有效,但对我来说情况并非如此。
这是我想要完成的示例:我有两个 numpy 数组:x包含 1 到 366 之间的数字(但不一定是全部),代表 2016 年的天数。“y”包含其他一些数字。我想制作“y”与“x”的散点图:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([27, 38, 100, 300])
y = np.array([0.5, 2.5, 1.0, 0.8])
plt.scatter(x, y)
Run Code Online (Sandbox Code Playgroud)
不出所料,这会生成一个刻度为 0、50、100、...、350 的图表。我想将这些刻度标签更改为各个日期。(例如,50 处的刻度线将被标记为“二月 19 日”之类的内容。)假设我有一个tick_to_date可以将数字 0 转换为日期字符串的函数,这样我就可以轻松手动更改图表中的所有刻度线。(如果您需要占位符功能tick_to_date = lambda x: ("day " + str(x)):)
ax = plt.gca()
ax.set_xticklabels([tick_to_date(tick.get_text()) for tick in ax.get_xticklabels()])
Run Code Online (Sandbox Code Playgroud)
然而,这只会执行一次。如果我现在放大或执行任何更改刻度的操作,新的刻度标签将不会是我想要的。
理想情况下,我不会手动设置标签,而是告诉轴始终使用我自己的tick_to_date函数转换刻度标签。或者,每次刻度线更改时都调用上面的代码行,但我不确定这是否会很好地工作。其中任何一个可能/可行/愉快可用吗?
python ×10
matplotlib ×9
plot ×3
seaborn ×2
axis ×1
axis-labels ×1
histogram ×1
labels ×1
pandas ×1