我想绘制一个相当小的矩阵(4乘5),如图所示 - 请参阅
(它是某个指标的短时间序列,由w + x + y + z组成。对于第1年,表示为“a”的指标值等于w_1 + x_1 + y_1 + z_1。)\
有什么想法如何策划这样的事情?也许绘制这种数据不是一个好主意。另一方面,它并不是那么糟糕的imo。它肯定比5个直方图更好,甚至更糟糕,5个饼图。 \
OT:你知道任何有高级R图例子的网站或文件吗?谷歌发现了简单的情节。
编辑:数据示例(向量w / x / y / z已经表示为百分比)
w <- (0.1,0.15,0.1,0.1,0.3)
x <- (0.15,0.15,0.1,0.1,0.25)
y <- (0.15,0.10,0.2,0.2,0.05)
z <- (0.6,0.6,0.6,0.6,0.4)
abcd <- (222222,333333,444444,500000,555555)
答案 0 :(得分:1)
根据您提供的图片和信息,我无法确切地告诉您图中右侧发生了什么,但是您使用来自ggplot2的geom_area
很容易看出您显示的相对丰富图。以下是如何从您提供的数据中获取它:
首先,您的数据应该以长格式显示在单个数据框中,这对于重塑包很容易。您还应为每个观察添加显式时间值:
df<-data.frame(w,x,y,z)
library(reshape)
df<-melt(df)
df$year<-rep(c(1:5),4)
现在可以轻松地将数据绘制为相对丰度图:
library(ggplot2)
ggplot(df,aes(x=year,y=value,group=variable))+geom_area(aes(fill=variable))
这或多或少是你想要做的吗?如果我只是部分回答或误解了你的问题,我很抱歉 - 正如我所说,我仍然不能完全确定你在图片中寻找的是什么。
答案 1 :(得分:0)
这似乎非常接近你的图形。
# your sample data
w <- c(0.1,0.15,0.1,0.1,0.3)
x <- c(0.15,0.15,0.1,0.1,0.25)
y <- c(0.15,0.10,0.2,0.2,0.05)
z <- c(0.6,0.6,0.6,0.6,0.4)
df <- rbind(w,x,y,z)
library(reshape2)
library(ggplot2)
library(scales)
gg <- melt(df)
ggplot(gg) +
geom_bar(aes(x=Var2, y=value, fill=Var1), stat="identity")+
scale_y_continuous(labels = percent)+
scale_fill_discrete("") + labs(x="Year", y="")
您的数据采用所谓的“宽格式”,这意味着不同的年份位于不同的列中。为了便于绘图,需要使用melt(...)
将其转换为“长格式”。在gg
中,所有值都在一列中(称为values
),并且有一个新列指示它最初来自哪个列(此处称为Var2
)。列Var1
包含原始行名称。
ggplot
来电执行以下操作:
ggplot(gg) establishes gg as the reference dataset
geom_bar(...) tells ggplot what to use for the x and y axes, and for colors
sacle_y... tells ggplot to use percent for the y-axis tick marks
scale_fill... tells ggplot to turn off the legend label
labs(...) tells ggplot how to label the axes.