GVKun编程网logo

matplotlib 中带有标题、轴标签的确切图形大小(matplotlib坐标轴标签)

22

针对matplotlib中带有标题、轴标签的确切图形大小和matplotlib坐标轴标签这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展matplotliby轴标签在右侧、matplotli

针对matplotlib 中带有标题、轴标签的确切图形大小matplotlib坐标轴标签这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展matplotlib y轴标签在右侧、matplotlib 设置图形大小 figsize dpi、matplotlib 设置图形大小时 figsize 与 dpi 的关系、matplotlib中LaTeX轴标签的粗体字体粗细等相关知识,希望可以帮助到你。

本文目录一览:

matplotlib 中带有标题、轴标签的确切图形大小(matplotlib坐标轴标签)

matplotlib 中带有标题、轴标签的确切图形大小(matplotlib坐标轴标签)

以前也有人问过类似的问题,但我所有的搜索结果都没有解决我的问题。采取以下示例代码:

from matplotlib.pyplot import *fig = figure(1, figsize=(3.25, 3))plot([0,1,5,2,9])title(''title'')xlabel(''xAxis'')ylabel(''yAxis'')fig.savefig(''test.png'',dpi=600)

结果图形为 2040x1890 像素,即 3.4”x3.15”,x-label 被截断。在图像编辑器中查看 PNG 文件,轴和刻度标签似乎符合所需的大小。我尝试从输出大小和请求大小中获取差异并将其反馈回 (3.25 - (3.4-3.25) = 3.10,但 matplotlib 似乎添加了一个任意缓冲区,但它仍然没有达到所需的大小. 一个人如何制作出所需尺寸的整体图?

答案1

小编典典

与大卫罗宾逊的评论一致,此处生成的数字是 3.25 x 3 英寸,由 Photoshop 测量,尽管 xlabel 确实显示截止(python 2.6 64 位中的 mpl 1.1.0,win7)

解决该问题的一种方法是手动调整边距subplot_adjust

from matplotlib.pyplot import *fig = figure(1, figsize=(3.25, 3))plot([0, 1, 5, 2, 9])title(''title'')xlabel(''xAxis'')ylabel(''yAxis'')subplots_adjust(bottom=0.14)   # <--fig.savefig(''test.png'', dpi=600) 

这些边距的默认值在 matploblibrc 文件中设置,您可以在那里永久修改它。在我的例子中,下边距的默认值为 0.10。

如果您的图形尺寸错误或正确,例如我的情况,您可以使用 subplot_adjust 为标签提供足够的空间。然后,如果需要,您可以计算校正以获得您想要的实际图片或图形大小,就像您已经做的那样。

保存图形的最终视图取决于该图形的大小。如果您show()将您的图形保存在 matplotlib 视图框架中,您将在图像中获得标签截断。但是,如果您手动增加图像的大小,您将看到标签出现,如果您保存它,它也会出现在保存的图像中。可以说这是所见即所得。你的身材很小,这会让你的标签被剪掉。所以另一种方法是制作一个更大的数字,也许用较低的 dpi 来保持整体大小。这也有效:

from matplotlib.pyplot import *fig = figure(1, figsize=(6.5, 6))   # <---plot([0, 1, 5, 2, 9])title(''title'')xlabel(''xAxis'')ylabel(''yAxis'')fig.savefig(''test.png'', dpi=300)    # <---

在任何情况下,我都会认为这是一个 matplolib 错误,因为您可以期望在绘图和保存后有一个未切割的数字。

matplotlib y轴标签在右侧

matplotlib y轴标签在右侧

是否有一种简单的方法可以将y轴标签放在图的右侧?我知道可以使用来对刻度标签进行此操作ax.yaxis.tick_right(),但是我想知道是否也可以对轴标签进行此操作。

我想到的一个想法是使用

ax.yaxis.tick_right()ax2 = ax.twinx()ax2.set_ylabel(''foo'')

但是,在保留y轴的范围的同时,将所有标签(刻度和轴标签)放置在右侧并没有达到预期的效果。简而言之,我想要一种将所有y轴标签从左向右移动的方法。

答案1

小编典典

看来您可以使用以下方法做到这一点:

ax.yaxis.set_label_position("right")ax.yaxis.tick_right()

请参阅此处的示例。

matplotlib 设置图形大小 figsize dpi

matplotlib 设置图形大小 figsize dpi

figure语法说明

  • figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
  • num: 图像编号或名称,数字为编号 ,字符串为名称
  • figsize: 指定figure的宽和高,单位为英寸
  • dpi: 指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80, 1英寸等于2.5cm, A4 纸是 21*30cm的纸张
  • facecolor: 背景颜色
  • edgecolor: 边框颜色
  • frameon: 是否显示边框
import matplotlib.pyplot as plt


def plot(fs, dpi_set):
    plt.figure(figsize=fs, dpi=dpi_set)
    plt.title("size:{}, dpi:{}".format(fs, dpi_set))
    plt.plot([0, 1, 2, 3], [3, 4, 2, 5])
    plt.savefig(str(fs) + "-" + str(dpi_set) + ".png")


if __name__ == "__main__":
    figsize = (2, 2)
    for i in range(1, 4):
        plot(figsize, i*72)

    for i in [2, 4, 6]:
        plot((i, i), 72)

Jupyter

 

 

REF

https://www.cnblogs.com/lijunjie9502/p/10327151.html

 

 

 

问题:

1、生成的柱状图中,横轴标签相互遮盖。

横轴标签相互遮挡


 

2、保存的图片太小,边缘几乎被裁切掉了。

布局不合适图片

 

方案:

问题1:

 

第1种方法:旋转X轴标签, 旋转-15度

plt.xticks(rotation=-15)

旋转标签


 

第2种方法:缩小X轴字体,字体缩小为5

plt.xticks(fontsize=5)

缩小X轴标签


第3种方法:长标签换行,需换行标签前加’\n’换行

x = ['American Indian/Eskimo/Aleut', '\n'+'Asian or Pacific Islander', 'Black', 'White', 'Other']

在这里插入图片描述


第4种方法:横纵轴颠倒。

plt.barh(df['sport_type'], df['score'])    # 绘制横向柱状图

 

第5种方法:拉长画布。第一个是长,第二个是宽,记得要把它放在最前面来自定义画布。

plt.figure(figsize=(25,10))

 

问题2:

保存图片(plt.savefig()前加入一行代码就好,让Matplotlib自行调整。

plt.tight_layout()

注意:必须是plt.savefig 前加入。

 

REF

https://blog.csdn.net/qq_36017609/article/details/108657017

https://www.jianshu.com/p/01ed72b2aeee

matplotlib 设置图形大小时 figsize 与 dpi 的关系

matplotlib 设置图形大小时 figsize 与 dpi 的关系

matplotlib 中设置图形大小的语句如下:

fig = plt.figure(figsize=(a, b), dpi=dpi)

其中:

  • figsize 设置图形的大小,a 为图形的宽, b 为图形的高,单位为英寸
  • dpi 为设置图形每英寸的点数

则此时图形的像素为:

px, py = a*dpi, b*dpi  # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels

也就是说,同一像素尺寸的图形(比如 1200 * 600)可以有任意种不同的组合,比如:

figsize=(15,7.5), dpi= 80
figsize=(12,6)  , dpi=100
figsize=( 8,4)  , dpi=150
figsize=( 6,3)  , dpi=200
etc.

但这些不同的组合,有什么区别呢?这取决于图中元素的大小。

 

线条,标记,文本等大多数元素都有以磅为单位的大小。Matplotlib 中 每英寸点数(ppi)为 72,则宽度为 1 点的线将为 1/72 英寸宽,使用 fontsize 12 点的文本将是 12/72 寸高。

为了便于说明,用 matplotlib 绘制相应的图形,如 表 1 所示。

 

如果以英寸为单位更改图形大小,而 dpi 不变,较大的图形仍具有相同的元素大小。因此,改变图形尺寸就像拿一张不同尺寸的纸张一样,这样做当然不会改变用同一笔绘制的线条的宽度。通过表 1 中的图形 2, 4, 6 的对比,可以明显的看出来这一点。

 

另一方面,更改 dpi 会缩放元素。在 72 dpi 时,1 宽度的线是 1 像素。在 144 dpi 时,这条线就是 2 像素。

 

span > 因此,更大的 dpi 就像放大镜一样。所有元素都通过镜头的放大倍数进行缩放。 通过表 1 中的图形 1 3 5 的对比,可以看出这一点。

 

综上:

  • 图形尺寸(figsize)确定图形的大小(以英寸为单位)。 这给出了轴(和其他元素)在图中的空间量。 较大的图形尺寸将允许显示更长的文本,更多的轴或更多的标记标签(表 1 中图形 3 与图形 4,图形 5 与图形 6 的对比可看出,像素尺寸相同时,图形尺寸越大,所能容纳的内容越多)。
  • dpi 确定了图形每英寸包含的像素数,图形尺寸相同的情况下, dpi 越高,则图像的清晰度越高(表 1 中 1,3,5 对比可看出)

matplotlib中LaTeX轴标签的粗体字体粗细

matplotlib中LaTeX轴标签的粗体字体粗细

在其中matplotlib,可以使轴标签的文本为粗体

plt.xlabel('foo',fontweight='bold')

您也可以在正确的后端使用LaTeX

plt.xlabel(r'$\phi$')

但是,当您将它们合并时,数学文本不再是粗体

plt.xlabel(r'$\phi$',fontweight='bold')

以下LaTeX命令似乎也没有任何作用

plt.xlabel(r'$\bf \phi$')
plt.xlabel(r'$\mathbf{\phi}$')

如何$\phi$在轴标签上加粗?

今天关于matplotlib 中带有标题、轴标签的确切图形大小matplotlib坐标轴标签的介绍到此结束,谢谢您的阅读,有关matplotlib y轴标签在右侧、matplotlib 设置图形大小 figsize dpi、matplotlib 设置图形大小时 figsize 与 dpi 的关系、matplotlib中LaTeX轴标签的粗体字体粗细等更多相关知识的信息可以在本站进行查询。

本文标签: