R ggplot2:如何写下它旁边每个数据点的y坐标?

时间:2017-06-24 21:28:50

标签: r

示例数据集:

function runAfterAjaxDone(serverResponse) {
  console.log(serverResponse);
  // Do what you need with 
}
function videomatter()
{




var xm = new XMLHttpRequest();
xm.onreadystatechange = function() {
	    if (xm.readyState == 4 && xm.status == 200) {
	    //	document.writeln("hello1");
	    	var a = xm.responseText;
	    	// JSON.stringify(a);
	    	 var myObj = JSON.parse(a);
	    	 //document.writeln(myObj.co001);
	var c =  listmake(myObj);
  runAfterAjaxDone(c); 
	document.writeln(c); //getting correct output
	return c;
	    }
}


xm.open("GET","GetVideoNameServlet?t=<%=sss%>",false);
xm.send();




}

以下代码:

n   value
100000  20
200000  30
300000  25
400000  40
500000  12

将产生以下输出:

enter image description here

但是,我想得到以下输出:

enter image description here

3 个答案:

答案 0 :(得分:3)

根据@Roland的建议,您可以使用geom_textgeom_labelannotate向地块添加文字。以下是使用geom_text的代码:

data <- structure(list(n = c(100000L, 200000L, 300000L, 400000L, 500000L
), value = c(20L, 30L, 25L, 40L, 12L)), .Names = c("n", "value"
), class = "data.frame", row.names = c(NA, -5L))

library(ggplot2)
ggplot(data, aes(x=n, y=value)) + 
geom_point(aes(n,value)) + geom_line(aes(n,value))+
geom_text(aes(label=value), hjust=c(-1,0,0,-1,2), vjust=c(1,-.5,1.5,0,0))

enter image description here

hjust控制水平对齐,vjust控制垂直对齐。详情见link。使用geom_label

ggplot(data, aes(x=n, y=value)) + 
geom_point(aes(n,value)) + geom_line(aes(n,value))+
geom_label(aes(label=value), hjust=c(-1,0,0,-1,2), vjust=c(1,-.5,1.5,0,0))

结果是:

enter image description here

也可以使用annotate,如下所示:

ggplot(data, aes(x=n, y=value)) + 
geom_point(aes(n,value)) + geom_line(aes(n,value))+
annotate("text", x=data$n, y=data$value, label=data$value, 
   hjust=c(-1,0,0,-1,2), vjust=c(1,-.5,1.5,0,0))

enter image description here

答案 1 :(得分:3)

另一个选项是library(ggrepel),以自动最小化点/标签重叠。我认为它比position_jitter()更可靠,如果你不能/不想对你所有的躲闪值进行硬编码,那就很有用了:

ggplot(data, aes(n, value)) + 
    geom_point() +
    geom_line() +
    # geom_text(aes(label = value), position = "jitter")
    geom_text_repel(aes(label = value),
                    point.padding = unit(.25, "lines"))

geom_label_repel()也可用,并且有很多选项来设置&#34;闪避&#34;区域大小。

enter image description here

答案 2 :(得分:1)

如果您在data的调用中指定ggplot参数,则以下geom_point调用等将继承它,因此您无需再次指定它。使用dplyr管道符号(%&gt;%)和geom_text结果将是:

library(dplyr)
library(ggplot2)

tribble(
   ~n, ~value,
   100000,  20,
   200000,  30,
   300000,  25,
   400000,  40,
   500000,  12
) %>% ggplot(aes(n, value)) + 
                geom_point() + 
                geom_line() + 
                geom_text(aes(label=value), nudge_y=1, nudge_x=-10000)

这与调用

基本相同
ggplot(data, aes(n, value)) + 
       geom_point() + 
       geom_line() + 
       geom_text(aes(label=value), nudge_y=1, nudge_x=-10000)

enter image description here