我有一系列20个图(不是子图)可以在一个图中制作.我希望传说能够在盒子之外.同时,我不想改变轴,因为图形的大小减少了.请帮助我以下查询:
这里有一个简单的问题:我试图将我的图例的大小设置得更matplotlib.pyplot
小(即文本更小).我正在使用的代码是这样的:
plot.figure()
plot.scatter(k, sum_cf, color='black', label='Sum of Cause Fractions')
plot.scatter(k, data[:, 0], color='b', label='Dis 1: cf = .6, var = .2')
plot.scatter(k, data[:, 1], color='r', label='Dis 2: cf = .2, var = .1')
plot.scatter(k, data[:, 2], color='g', label='Dis 3: cf = .1, var = .01')
plot.legend(loc=2)
Run Code Online (Sandbox Code Playgroud) 我有一个带有两个y轴的情节,使用twinx()
.我也给线条贴了标签,并希望用它们来展示legend()
,但我只是成功地在图例中获得了一个轴的标签:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('mathtext', default='regular')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(time, Swdown, '-', label = 'Swdown')
ax.plot(time, Rn, '-', label = 'Rn')
ax2 = ax.twinx()
ax2.plot(time, temp, '-r', label = 'temp')
ax.legend(loc=0)
ax.grid()
ax.set_xlabel("Time (h)")
ax.set_ylabel(r"Radiation ($MJ\,m^{-2}\,d^{-1}$)")
ax2.set_ylabel(r"Temperature ($^\circ$C)")
ax2.set_ylim(0, 35)
ax.set_ylim(-20,100)
plt.show()
Run Code Online (Sandbox Code Playgroud)
所以我只得到图例中第一个轴的标签,而不是第二个轴的标签"temp".我怎么能将这第三个标签添加到图例中?
我试图保持一层的图例(平滑)并删除另一层(点)的图例.我试过用guides(colour = FALSE)
和关掉传说geom_point(aes(color = vs), show.legend = FALSE)
.
编辑:由于这个问题及其答案很受欢迎,一个可重现的例子似乎是有序的:
library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
我熟悉以下问题:
看起来这些问题的答案很有可能摆脱轴的精确收缩,以便传说适合.
然而,收缩轴并不是一个理想的解决方案,因为它使数据变得更小,使得它实际上更难以解释; 特别是当它的复杂和有很多事情发生时...因此需要一个大的传奇
文档中复杂图例的示例演示了对此的需求,因为其图中的图例实际上完全遮盖了多个数据点.
http://matplotlib.sourceforge.net/users/legend_guide.html#legend-of-complex-plots
我希望能够做的是动态扩展图框的大小以适应不断扩大的图形图例.
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(x, np.sin(x), label='Sine')
ax.plot(x, np.cos(x), label='Cosine')
ax.plot(x, np.arctan(x), label='Inverse tan')
lgd = ax.legend(loc=9, bbox_to_anchor=(0.5,0))
ax.grid('on')
Run Code Online (Sandbox Code Playgroud)
请注意最终标签"逆棕褐色"实际上是如何在图框之外(看起来严重截止 - 而不是出版质量!)
最后,我被告知这是R和LaTeX中的正常行为,所以我有点困惑为什么在python中这么难...有历史原因吗?Matlab在这件事上同样很差吗?
我在pastebin http://pastebin.com/grVjc007上有这个代码的(仅略微)更长版本
正如标题所说:在使用基本图形时,如何在绘图区域外绘制图例?
我想要摆弄layout
并制作一个只包含图例的空图,但我会对使用基本图形设施的方式感兴趣,例如,par(mar = )
为图例右侧的图例获取一些空间.
这是一个例子:
plot(1:3, rnorm(3), pch = 1, lty = 1, type = "o", ylim=c(-2,2))
lines(1:3, rnorm(3), pch = 2, lty = 2, type="o")
legend(1,-1,c("group A", "group B"), pch = c(1,2), lty = c(1,2))
Run Code Online (Sandbox Code Playgroud)
生产:
但正如所说,我希望图例在绘图区域之外(例如,图表/图表的右侧).
我对ggplot2中的传说有疑问.我设法在同一图表中绘制三条线,并想要添加使用三种颜色的图例.这是使用的代码
library(ggplot2)
require(RCurl)
link<-getURL("https://dl.dropbox.com/s/ds5zp9jonznpuwb/dat.txt")
datos<- read.csv(textConnection(link),header=TRUE,sep=";")
datos$fecha <- as.POSIXct(datos[,1], format="%d/%m/%Y")
temp = ggplot(data=datos,aes(x=fecha, y=TempMax,colour="1")) +
geom_line(colour="red") + opts(title="TITULO") +
ylab("Temperatura (C)") + xlab(" ") +
scale_y_continuous(limits = c(-10,40)) +
geom_line(aes(x=fecha, y=TempMedia,colour="2"),colour="green") +
geom_line(aes(x=fecha, y=TempMin,colour="2"),colour="blue") +
scale_colour_manual(values=c("red","green","blue"))
temp
Run Code Online (Sandbox Code Playgroud)
和输出
我想添加一个带有三种颜色的图例和变量的名称(TempMax,TempMedia和TempMin).我试过了
scale_colour_manual
Run Code Online (Sandbox Code Playgroud)
但找不到确切的方法.
遗憾的是,原始数据已从链接网站中删除,无法恢复.但它们来自具有此格式的meteo数据文件
"date","Tmax","Tmin","Tmed","Precip.diaria","Wmax","Wmed"
2000-07-31 00:00:00,-1.7,-1.7,-1.7,-99.9,20.4,20.4
2000-08-01 00:00:00,22.9,19,21.11,-99.9,6.3,2.83
2000-08-03 00:00:00,24.8,12.3,19.23,-99.9,6.8,3.87
2000-08-04 00:00:00,20.3,9.4,14.4,-99.9,8.3,5.29
2000-08-08 00:00:00,25.7,14.4,19.5,-99.9,7.9,3.22
2000-08-09 00:00:00,29.8,16.2,22.14,-99.9,8.5,3.27
2000-08-10 00:00:00,30,17.8,23.5,-99.9,7.7,3.61
2000-08-11 00:00:00,27.5,17,22.68,-99.9,8.8,3.85
2000-08-12 00:00:00,24,13.3,17.32,-99.9,8.4,3.49
Run Code Online (Sandbox Code Playgroud) 要在matplotlib图中添加图例,只需运行即可legend()
.
如何从情节中删除图例?
(我最接近的是运行legend([])
以便从数据中清空图例.但是在右上角留下了一个丑陋的白色矩形.)
我有两个水平对齐的ggplots grid.arrange
.我查看了很多论坛帖子,但我尝试的所有内容似乎都是现在更新并命名为其他内容的命令.
我的数据看起来像这样;
# Data plot 1
axis1 axis2
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.417117 -0.002592
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.186860 -0.203273
# Data plot 2
axis1 axis2
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
#And I run this:
library(ggplot2)
library(gridExtra)
groups=c('group1','group2','group3','group4','group1','group2','group3','group4')
x1=data1[,1]
y1=data1[,2]
x2=data2[,1]
y2=data2[,2]
p1=ggplot(data1, aes(x=x1, y=y1,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8) …
Run Code Online (Sandbox Code Playgroud) 有没有办法在ggplot2中更改图例项之间的间距?我现在有
legend.position ="top"
Run Code Online (Sandbox Code Playgroud)
它会自动生成水平图例.然而,物品的间距非常接近,我想知道如何将它们分开更远.