使 matplotlib 图形默认看起来像 R?

2024-05-09

Is there a way to make matplotlib behave identically to R, or almost like R, in terms of plotting defaults? For example R treats its axes pretty differently from matplotlib. The following histogram enter image description here

有带有向外刻度的“浮动轴”,这样就没有内部刻度(与matplotlib)并且轴不会在原点“附近”交叉。此外,直方图可以“溢出”到未用刻度线标记的值 - 例如x 轴以 3 结束,但直方图稍微超出了它。如何为所有直方图自动实现这一点matplotlib?

Related question: scatter plots and line plots have different default axes settings in R, for example: enter image description here

不再有内部蜱虫,蜱虫朝外。此外,刻度线在原点(y 轴和 x 轴在轴左下角交叉的地方)稍晚一些开始,并且刻度线在轴结束点稍早一些结束。这样,最低 x 轴刻度和最低 y 轴刻度的标签就不会真正交叉,因为它们之间有一个空格,这使绘图具有非常优雅干净的外观。请注意,轴刻度标签和刻度本身之间也有相当大的空间。

另外,默认情况下,未标记的 x 或 y 轴上没有刻度,这意味着与右侧标记的 y 轴平行的左侧 y 轴没有刻度,x 轴也是如此,再次消除图中的混乱。

有没有办法让 matplotlib 看起来像这样?一般来说,默认情况下与默认 R 图一样多?我喜欢matplotlib很多,但我认为 R 默认值/开箱即用的绘图行为确实已经把事情做好了,它的默认设置很少导致重叠的刻度标签、混乱或压缩的数据,所以我希望默认值尽可能像尽可能的那样。


1年后编辑:

With seaborn,下面的例子就变成:

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set(style='ticks')
# Data to be represented
X = np.random.randn(256)

# Actual plotting
fig = plt.figure(figsize=(8,6), dpi=72, facecolor="white")
axes = plt.subplot(111)
heights, positions, patches = axes.hist(X, color='white')
seaborn.despine(ax=axes, offset=10, trim=True)
fig.tight_layout()
plt.show()

非常简单。

原帖:

这篇博文是迄今为止我见过的最好的博文。http://messymind.net/making-matplotlib-look-like-ggplot/ http://messymind.net/making-matplotlib-look-like-ggplot/

它并不像您在大多数“入门”类型示例中看到的那样专注于标准 R 图。相反,它试图模仿 ggplot2 的风格,后者似乎几乎被普遍认为是时尚且设计精良的。

要获得像条形图中所示的轴脊柱,请尝试遵循此处的前几个示例之一:http://www.loria.fr/~rougier/coding/gallery/ http://www.loria.fr/%7Erougier/coding/gallery/

最后,要使轴刻度线指向外侧,您可以编辑matplotlibrc文件要说xtick.direction : out and ytick.direction : out.

将这些概念结合在一起,我们得到这样的结果:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
# Data to be represented
X = np.random.randn(256)

# Actual plotting
fig = plt.figure(figsize=(8,6), dpi=72, facecolor="white")
axes = plt.subplot(111)
heights, positions, patches = axes.hist(X, color='white')

axes.spines['right'].set_color('none')
axes.spines['top'].set_color('none')
axes.xaxis.set_ticks_position('bottom')

# was: axes.spines['bottom'].set_position(('data',1.1*X.min()))
axes.spines['bottom'].set_position(('axes', -0.05))
axes.yaxis.set_ticks_position('left')
axes.spines['left'].set_position(('axes', -0.05))

axes.set_xlim([np.floor(positions.min()), np.ceil(positions.max())])
axes.set_ylim([0,70])
axes.xaxis.grid(False)
axes.yaxis.grid(False)
fig.tight_layout()
plt.show()

可以通过多种方式指定脊柱的位置。如果你在 IPython 中运行上面的代码,你可以这样做axes.spines['bottom'].set_position?查看您的所有选项。

嗯是的。这并不完全是微不足道的,但你可以接近。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使 matplotlib 图形默认看起来像 R? 的相关文章

随机推荐

  • 双击事件 - 多个范围

    我正在寻找为双击事件在多个范围内进行编码的最佳方法 Private Sub Worksheet BeforeDoubleClick ByVal Target As Range Cancel As Boolean If Not Interse
  • 如何为背景图像添加内边距

    我有一个LinearLayout其中有一个背景图像 一个 9 修补的 png 文件 如何向左和右添加填充 以使背景图像不占据整个宽度 我努力了android paddingLeft and android paddingRight 但这并没
  • vue:转义并渲染 HTML 字符串?

    我正在尝试在模板中渲染一些 HTML 字符串 但我希望它们是字符串 我不想渲染 富文本 我开始于
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul
  • 如何使用 SVN/Tortoise 从 Google Code 下载代码?

    我刚刚看到一个非常酷的 WPF Twitter 客户端 我认为它是由 Herding Code 播客开发的畜牧法 http www herdingcode com called Witty http code google com p wi
  • 科学规划中的可重复性

    除了产生不正确的结果之外 科学编程中最令人担忧的事情之一就是无法重现生成的结果 哪些最佳实践有助于确保您的分析具有可重复性 在线发布原始原始数据并免费提供下载 使代码库开源并可在线下载 如果在优化中使用随机化 则重复优化多次 选择结果的最佳
  • 在 React Native 中集成 Stack、Drawer 和 Tab Navigator

    我尝试在一个项目中一起实现 Stack Drawer 和 Tab Navigator 但它没有达到我的预期 首先 创建选项卡导航器 一个是 主页 另一个是 职业 接下来 创建 Stack Navigator 并将抽屉集成到 Navigati
  • 如何在 where 子句中使用别名? [复制]

    这个问题在这里已经有答案了 可能的重复 在 WHERE 子句中引用列别名 https stackoverflow com questions 8370114 referring to a column alias in a where cl
  • 使用 System.Security.Cryptography 将 Win32 Crypto API 调用转换为 C#

    我接到一项任务 要删除我们产品的一个 dll 并将其替换为纯 C 的 dll 旧的 DLL 是 NET 2 0 托管 C C CLI 它包装了对 Win32 本机加密 API 的调用 新的 DLL 应公开具有相同名称和方法的新对象 但应使用
  • Safari 的 Javascript 与 document.write 的问题

    我的问题只发生在 Safari 上 IE FF Chrome 和 Opera 都可以完美运行 我正在向 DOM 添加一个对象 与 YouTube 的方式完全相同 具体取决于 ActiveX 或 NPAPI 因此在确定写入对象类型后 我通过以
  • JavaScript 数组中的负索引是否会影响数组长度?

    在javascript中我定义了一个像这样的数组 var arr 1 2 3 我也可以做 arr 1 4 现在如果我这样做 arr undefined 我也失去了对值的引用arr 1 所以对我来说 从逻辑上来说 arr 1 也是arr 但是
  • 如何在对话框中配置自定义按钮?

    这里我有一个自定义对话框 里面有背景 2 ImageButton 问题是 当我尝试为该按钮设置 onclick 侦听器时 程序将返回 NullPointerException 我不知道为什么会发生这种情况 无论如何如何将操作分配给对话框内的
  • 资源注入不适用于 glassfish 4,而查找可以工作

    我在应用程序范围托管 bean 中使用 glassfish 4 进行资源注入 但 glassfish 无法工作 而是使用默认的 derby 数据库 这是我的代码 Named value dbManager ApplicationScoped
  • Docker 构建器构建与 docker 构建

    在 Docker 的文档页面上 有一个条目码头工人建造者 https docs docker com engine reference commandline builder 这是父命令docker 构建器构建 https docs doc
  • Redis、会话过期和反向查找

    我目前正在构建一个网络应用程序 并想使用 Redis 来存储会话 登录时 会话会使用相应的用户 ID 插入到 Redis 中 并且过期时间设置为 15 分钟 我现在想实现会话的反向查找 获取具有特定用户 ID 的会话 这里的问题是 由于我无
  • Emacs-Lisp:如何将emacs-lisp程序打包为PC应用程序?

    只是想知道是否可以将 emacs 和 Lisp 程序打包和部署为 PC 应用程序 这样一旦下载并运行 setup exe 某种程度 用户就可以启动应用程序以使 emacs 运行特定的 Lisp 程序 就像应用程序已实现一样通过其他语言和平台
  • buildnumber-maven-plugin 属性 ${buildNumber} 的可见性

    我正在尝试使用buildnumber maven plugin http www mojohaus org buildnumber maven plugin将 SCM 内部版本号附加到 WAR 工件名称 然后使用tomcat7 maven
  • 如何逐步绘制矢量路径? (拉斐尔.js)

    如何逐步动画化矢量路径 就像它被绘制一样 换句话说 慢慢地逐像素地显示路径 我在用着Rapha l js but如果您的答案不是特定于库的 例如可能有一些通用的编程模式可以完成此类事情 我对矢量动画相当陌生 欢迎 使用直线路径很容易做到 就
  • (R 错误)错误:cons 内存耗尽(达到限制?)

    我正在处理大数据 并且有一个 70GB 的 JSON 文件 我正在使用 jsonlite 库将文件加载到内存中 我尝试过 AWS EC2 x1 16large 机器 976 GB RAM 来执行此负载 但 R 因错误而中断 Error co
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t