你如何改变用matplotlib绘制的图形的大小?
我正在编写一个快速而肮脏的脚本来动态生成绘图.我使用下面的代码(来自Matplotlib文档)作为起点:
from pylab import figure, axes, pie, title, show
# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]
explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})
show() # Actually, don't show, just save to foo.png
Run Code Online (Sandbox Code Playgroud)
我不想在GUI上显示绘图,相反,我想将绘图保存到文件(例如foo.png),因此,例如,它可以在批处理脚本中使用.我怎么做?
显然,民间已经想出了如何在Mathematica和LaTeX中制作xkcd风格的图形.我们可以用R做吗?GGPLOT2-ERS?一个geom_xkcd和/或theme_xkcd?
我想在基本图形中,par(xkcd = TRUE)?我该怎么做?
作为ggplot2中的第一个刺(并且在下面更加优雅地显示),将jitter参数添加到一行可以获得很好的手绘外观.所以 -
ggplot(mapping=aes(x=seq(1,10,.1), y=seq(1,10,.1))) +
geom_line(position="jitter", color="red", size=2) + theme_bw()
Run Code Online (Sandbox Code Playgroud)
这是一个很好的例子 - 但轴和字体显得比较棘手.但是,字体显示已解决(下方).处理轴的唯一方法是将它们清空并用手绘制它们吗?有更优雅的解决方案吗?特别是在ggplot2中,是否可以修改新主题系统中的element_line以获取类似抖动的参数?
我想在同一个图中绘制y1和y2.
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做的时候,它们并没有被绘制在同一个地块中.
在Matlab中可以做到hold on
,但有人知道如何在R中做到这一点吗?
Matplotlib提供以下功能:
cla() # Clear axis
clf() # Clear figure
close() # Close a figure window
Run Code Online (Sandbox Code Playgroud)
该文档没有提供很多关于这些功能之间的区别的见解.我什么时候应该使用每个功能,它究竟做了什么?
我绘制以下内容:
library(ggplot2)
carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)
ggplot(vegLengths, aes(length, fill = veg)) +
geom_density(alpha = 0.2)
Run Code Online (Sandbox Code Playgroud)
现在说我只是想绘制之间的区域x=-5000
来5000
,而不是整个范围.
我怎样才能做到这一点?
我试图在任一轴上绘制一个没有刻度线或数字的图形(我使用传统意义上的轴,而不是matplotlib命名法!).我遇到的一个问题是matplotlib通过减去值N来调整x(y)ticklabels,然后在轴的末尾添加N.
这可能是模糊的,但下面的简化示例突出了问题,'6.18'是N的违规值:
import matplotlib.pyplot as plt
import random
prefix = 6.18
rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')
frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
xlabel_i.set_visible(False)
xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
xlabel_i.set_fontsize(0.0)
xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
tick.set_visible(False)
plt.show()
Run Code Online (Sandbox Code Playgroud)
我想知道的三件事是:
如何首先关闭这种行为(虽然在大多数情况下它是有用的,但并不总是!)我已经查看了matplotlib.axis.XAxis
,找不到任何合适的东西
怎么能让N消失(即X.set_visible(False)
)
还有更好的方法来完成上述任务吗?我的最终情节将是图中的4x4子图,如果这是相关的.
我使用R绘制一个简单的线性回归.我想将该图像保存为PNG或JPEG,是否可以自动执行?(通过代码)
有两个不同的问题:首先,我已经在我的显示器上查看情节了,我想保存原样.其次,我还没有生成情节,但是当我执行绘图代码时,我想直接将它保存到磁盘.
我有如下图.它是使用此命令创建的:
library(ggplot2)
df <- data.frame(cond = factor(rep(c("A", "B"), each = 200)),
rating = c(rnorm(200), rnorm(200, mean=.8)))
ggplot(df, aes(x=rating, fill=cond)) +
geom_density(alpha = .3) +
xlab("NEW RATING TITLE") +
ylab("NEW DENSITY TITLE")
Run Code Online (Sandbox Code Playgroud)
现在,接下来我要做的事情就是修改图例标题从COND进入新里程TITLE.
所以我所做的只是添加以下行添加上面代码的结尾:
+labs(colour="NEW LEGEND TITLE")
Run Code Online (Sandbox Code Playgroud)
但它不起作用.什么是正确的方法呢?
我有一个semilogx情节,我想删除xticks.我试过了:
plt.gca().set_xticks([])
plt.xticks([])
ax.set_xticks([])
Run Code Online (Sandbox Code Playgroud)
网格消失(确定),但小蜱(在主蜱的位置)仍然存在.如何删除它们?