t = 0 : 0.01 : 2 * pi;
s = sin(t);
c = cos(t);
m = -sin(t);
hold on;
plot(t, s, 'r');
plot(t, c, 'b');
plot(t, m, 'g');
hold off;
legend('', 'cosine', '');
Run Code Online (Sandbox Code Playgroud)

我的绘图中有几条曲线.我想只为其中一些人展示传奇.我该怎么做?
例如,如何在上面的绘图中仅显示余弦曲线的图例?当我调用legend()函数legend('', 'cosine');而不是添加空的第三个参数时,确实从图例中删除了第三个绿线.但这并没有解决我的问题,因为不需要的红线保持可见.
我有三个图,我尝试将它们与grid.arrange结合起来.最后一个图的高度应小于前两个图,所有图的宽度应相同.
一个工作的例子:
p1 <- qplot(mpg, wt, data=mtcars)
p2 <- p1
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank())
grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2),
arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1))
Run Code Online (Sandbox Code Playgroud)
这里,最后一个图的宽度大于前两个图.在我的真实数据中,即使我将文本和标题保留在y轴上,我仍然有第三个图的不同宽度.
我试图添加"宽度":
grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2),
arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1), widths=c(2,1))
Run Code Online (Sandbox Code Playgroud)
但它变成了两列情节......
我还尝试了另一个代码:
p1 <- ggplotGrob(p1)
p2 <- ggplotGrob(p2)
p3 <- ggplotGrob(p3)
#
stripT <- subset(p2$layout, grepl("spacer", p2$layout$name))
p3 <- p3[-stripT$t, ]
grid.draw(rbind(p1, p2, p3, size = "first"))
Run Code Online (Sandbox Code Playgroud)
我有相同的宽度,但现在我不知道如何改变高度......
那么,有人可以帮助我将高度和宽度方面结合起来进行最终的情节吗?
好吧,假设我有以下情节.
df = data.frame(date=c(rep(2008:2013, by=1)),
value=c(303,407,538,696,881,1094))
barplot(df$value, main="TITLE", col="gray", ylab="People", xlab="Years")
Run Code Online (Sandbox Code Playgroud)
如何将背景更改为深蓝色?
我知道这可以用ggplot2,但不知道我是否可以用基本图形做到这一点.
在熊猫,我正在做:
bp = p_df.groupby('class').plot(kind='kde')
Run Code Online (Sandbox Code Playgroud)
p_df是一个dataframe对象.
然而,这产生了两个图,每个类一个.如何在同一个图中强制同时使用两个类的一个图?
当我用熊猫制作条形图时我总是很烦,我想更改图例中标签的名称.例如考虑这段代码的输出:
import pandas as pd
from matplotlib.pyplot import *
df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
df.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)
legend(['AAA', 'BBB'])
Run Code Online (Sandbox Code Playgroud)
但我最终得到了这个:
实际上,第一个虚线似乎对应于另一个补丁.
所以我想知道是否有一个简单的技巧来更改标签,或者我是否需要使用matplotlib独立绘制每个列并自己设置标签.谢谢.
R中是否有任何Streamgraph实现?
Streamgraphs是叠加图形的变体,是Havre等人的ThemeRiver在选择基线,图层排序和颜色选择方面的改进.
例:

我被要求重新创建以下风格的情节.(请忽略这是否是一种良好的可视化类型的问题,并将此视为在数字表中添加彩色元素.)
大部分都很简单,但我还没有找到一个让中心空洞的好方法.为了节省时间,我可能会采用添加隐形虚拟数据的方法(如果没有其他人这样做,我会发布该方法,但它似乎不如修改主题的方法更优化).是否有基于主题的解决方案或非ggplot2 R解决方案?
library(ggplot2)
# make sample dataframe
Category <- c("Electronics", "Appliances", "Books", "Music", "Clothing",
"Cars", "Food/Beverages", "Personal Hygiene",
"Personal Health/OTC", "Hair Care")
Percent <- c(81, 77, 70, 69, 69, 68, 62, 62, 61, 60)
internetImportance<-data.frame(Category,Percent)
# append number to category name
internetImportance$Category <-
paste0(internetImportance$Category," - ",internetImportance$Percent,"%")
# set factor so it will plot in descending order
internetImportance$Category <-
factor(internetImportance$Category,
levels=rev(internetImportance$Category))
# plot
ggplot(internetImportance, aes(x = Category, y = Percent,
fill = Category)) +
geom_bar(width = 0.9, stat="identity") …Run Code Online (Sandbox Code Playgroud) 我被要求在下面的情节周围放置一个完整的边框:

使用panel.border = element_rect(colour = "black")结果在图中丢失变成空白.
我无法使用,theme_bw()因为它没有与通常主题相同的功能,我目前使用的代码如下:
graph<-ggplot(d,aes(x=d$AOE, y=d$MEI)
)+
geom_point(shape=20, size=3)+
geom_rug()+
annotate("text", x = -1.1, y = 14000, label = "27/04/2011") +
annotate("text", x = -1.3, y = 10400, label = "03/04/1974") +
xlab("MEI")+
ylab("AOE")+
scale_y_log10()+
theme(axis.text.y = element_text(size=14),
axis.text.x = element_text(size=14),
axis.title.y = element_text(size=14),
axis.title.x = element_text(size=14),
panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(colour = "black")
)
graph
Run Code Online (Sandbox Code Playgroud)
任何关于如何获得全黑边框的建议将非常感谢!
我想知道如何测试生成图形的函数.我有一个简单的绘图功能img:
img <- function() {
plot(1:10)
}
Run Code Online (Sandbox Code Playgroud)
在我的包中,我喜欢使用这个函数创建一个单元测试testthat.因为plot和它的朋友在基础图形只是返回NULL一个简单
expect_identical的不工作:
library("testthat")
## example for a successful test
expect_identical(plot(1:10), img()) ## equal (as expected)
## example for a test failure
expect_identical(plot(1:10, col="red"), img()) ## DOES NOT FAIL!
# (because both return NULL)
Run Code Online (Sandbox Code Playgroud)
首先,我考虑绘制到文件中并比较md5校验和以确保函数的输出相等:
md5plot <- function(expr) {
file <- tempfile(fileext=".pdf")
on.exit(unlink(file))
pdf(file)
expr
dev.off()
unname(tools::md5sum(file))
}
## example for a successful test
expect_identical(md5plot(img()),
md5plot(plot(1:10))) ## equal (as expected)
## example for …Run Code Online (Sandbox Code Playgroud)