我有一个简单的数据框:
seq <- 1:10
name <- c(paste0("company",1:10))
value <- c(250,125,50,40,40,30,20,20,10,10)
d <- data.frame(seq,name,value)
Run Code Online (Sandbox Code Playgroud)
我想以这种方式绘制它:
require(ggplot2)
ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)
现在我想使用情节,主要是为了能够,当鼠标悬停在某一点上时,获取除价值之外的其他信息,例如公司名称.我试试这个:
require(plotly)
ggplotly()
Run Code Online (Sandbox Code Playgroud)
这给我一个工具提示,但只有seq和值.我尝试了选项tooltip =但它指定你可以使用美学中唯一的变量描述,我不会在我的使用中使用该名称.
有解决方案吗 我看到我不是第一个遇到这个问题的人,但我还没有找到与ggplotly合作的答案.
假设数据
library(ggplot2)
library(plotly)
set.seed(357)
xy <- data.frame(letters = rep(c("a", "b", "c"), times = 3),
values = runif(9),
groups = rep(c("group1", "group2", "group3"), each = 3))
letters values groups
1 a 0.9913409 group1
2 b 0.6245529 group1
3 c 0.5245744 group1
4 a 0.4601817 group2
5 b 0.2254525 group2
6 c 0.5898001 group2
7 a 0.1716801 group3
8 b 0.3195294 group3
9 c 0.8953055 group3
ggplotly(
ggplot(xy, aes(x = letters, y = values, group = groups)) +
theme_bw() +
geom_point()
) …
Run Code Online (Sandbox Code Playgroud) 我发现了 ggplot 和 ggplotly 中同一个图表之间有趣而奇怪的区别
income_gap_chart <- ggplot(income_gap, aes(x = Country, y = Percent, fill = Income)) +
geom_bar(position = "dodge", stat = "identity") +
scale_fill_brewer(palette = "Set1") +
coord_flip() +
theme(axis.title.y = element_blank()) +
scale_y_continuous(limits = c(0, 100)) +
theme_tufte() +
theme(axis.title.y = element_blank()) +
theme(legend.position = "bottom")
Run Code Online (Sandbox Code Playgroud)
对于 ggplot 它看起来很完美,底部有一个图例标题
但是当我用 ggplotly() 包装它时,图例开始表现不同
我的问题 - 我想要 ggplotly 格式的第一个图表,但无法解决这个问题,底部的图例不起作用。想法?
谢谢!
我正在尝试将geom_tile
使用 构建的图转换ggplot
为ggplotly
. 然而,瓷砖在情节上是扭曲的。同样的问题也发生在geom_raster
.
展示:
library(ggplot2)
library(plotly)
set.seed(1)
n <- 10
X <- data.frame(xcoord = sample(1:10, n, replace = TRUE),
ycoord = sample(1:10, n, replace = TRUE),
value = runif(n))
gg <- ggplot(X) + geom_tile(aes(x = xcoord, y = ycoord, fill = value))
ggplotly(gg)
Run Code Online (Sandbox Code Playgroud)
前 R 用户,我曾经通过 ggplotly() 函数广泛地结合 ggplot 和 plot_ly 库来显示数据。
刚到 Python 时,我看到 ggplot 库可用,但在与 plotly 的简单组合中找不到任何用于图形反应显示的内容。
我会寻找的是这样的:
from ggplot import*
import numpy as np
import pandas as pd
a = pd.DataFrame({'grid': np.arange(-4, 4),
'test_data': np.random.random_integers(0, 10,8)})
p2 = ggplot(a, aes(x = 'grid', y = 'test_data'))+geom_line()
p2
ggplotly(p2)
Run Code Online (Sandbox Code Playgroud)
最后一行将启动一个经典的情节动态查看器,其中包含鼠标图形交互、曲线选择等所有强大的功能......
谢谢你的帮助 :),
纪尧姆
我一直在使用的时候有一个问题,ggplotly()
一个ggplot
图:y轴消失.这是一个使用iris
数据集的可重现的例子(这个例子非常简单,但无论如何)
data(iris)
g = ggplot(data = iris, aes(x = Petal.Length, y = Petal.Width, fill = Species)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_manual(name = "legend", values = c("blue", "red", "green")) +
ylab("Y title") +
ylim(c(0,3)) +
xlab("X title") +
ggtitle("Main title")
g
ggplotly(g)
Run Code Online (Sandbox Code Playgroud)
如您所见,Y轴标题消失了.
好吧,如果ylim
删除它可行,但我想指定y限制.
我试着做以下事情:
data(iris)
g = ggplot(data = iris, aes(x = Petal.Length, y = Petal.Width, fill = Species)) +
geom_bar(stat = "identity", position = "dodge") +
scale_fill_manual(name …
Run Code Online (Sandbox Code Playgroud) 是否可以将plotly/ggplotly图导出到Powerpoint并保持其交互性?我的意思是,例如允许用户更改绘图线的颜色、粗细等。
示例代码:
set.seed(100)
d <- diamonds[sample(nrow(diamonds), 1000), ]
p <- ggplot(data = d, aes(x = carat, y = price)) +
geom_point(aes(text = paste("Clarity:", clarity))) +
geom_smooth(aes(colour = cut, fill = cut)) + facet_wrap(~ cut)
gg <- ggplotly(p)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,使用webshot
包将绘图导出为.png
文件不是解决方案。我应该能够编写这个解决方案,并从 R 或任何其他编程语言自动化 - 在线工具或任何其他应用程序,用户应该单击它来获取结果,但不能解决问题。
我正在尝试将 ggplot 变成情节。ggplot 渲染得很好,但是当我通过 ggplotly 将其放入时,图例突然在标签后添加了括号和“,1”。
这是一个示例假数据:
sorted1<-data.frame(CommDate=c(as.Date("2017-09-12"), as.Date("2017-10-15")), CommName=c("Foo", "Bar"), PubB4=c(2,3))
Run Code Online (Sandbox Code Playgroud)
这是我试图在其上运行的代码:
ggplotly(ggplot(sorted1, aes(x=as.Date(CommDate), y=PubB4))+
geom_smooth(level=0.0, aes(colour="Moving average"), se=FALSE)+
geom_point(aes(fill=CommName), size=4)+
expand_limits(y=c(0,4.5))+
geom_line(mapping=aes(y=4),colour="orangered3",size=1)+
geom_text(mapping=aes(y=4.2, x=min(sorted1$CommDate)+4), label="Target", size=3)+
xlab("Committee Date")+
guides(fill=guide_legend(title="Committee Names"), colour=guide_legend(title.theme=element_blank(),title=NULL))+
scale_x_date(labels = date_format("%b-%y"))+
theme_light()+
theme(plot.title=element_text(hjust=0.5, size=12),panel.grid.major.x = (element_blank()),
panel.grid.minor.x = (element_blank()),
axis.title = element_text(size=8), legend.title = element_text(size=10),
legend.text = element_text(size=8), legend.box = 'vertical', legend.spacing.y = unit(-2,"mm"))+
scale_colour_manual(name="",values="#0072B2"))
Run Code Online (Sandbox Code Playgroud)
(geom_smooth
此处不呈现,但会处理完整数据。)
这是我从中得到的:
为什么图例显示为“(foo,1)”?
我尝试删除geom_smooth
实际上解决了问题的 ,但我需要它 - 我如何保留它但修复图例?
谢谢!
更新:好的,我开始注释掉一些东西,看看会发生什么。如果我aes()
从 中删除geom_smooth
,也可以解决问题,只要我保持scale_colour_manual …
我正在使用 Plotly 和 Shiny在 R 中构建一个交互式时间序列热图。作为此过程的一部分,我将热图值从连续格式重新编码为有序格式 - 所以我有一个热图,其中六种颜色代表特定的计数类别,而这些类别是根据聚合计数值创建的。但是,这会导致使用ggplotly()
. 我已经将它追溯到tooltip()
Plotly 中呈现交互框的函数。即使我只是向tooltip()
. 我正在使用来自约翰霍普金斯 CSSE 存储库. 这是一个简化的热图代码,它也使用辛普森一家的颜色主题ggsci
:
#Load packages
library(shiny)
library(plotly)
library(tidyverse)
library(RCurl)
library(ggsci)
#Read example data from Gist
confirmed <- read_csv("https://gist.githubusercontent.com/GeekOnAcid/5638e37c688c257b1c381a15e3fb531a/raw/80ba9704417c61298ca6919343505725b8b162a5/covid_selected_europe_subset.csv")
#Wrap ggplot of time-series heatmap in ggplotly, call "tooltip"
ggplot_ts_heatmap <- confirmed %>%
ggplot(aes(as.factor(date), reorder(`Country/Region`,`cases count`),
fill=cnt.cat, label = `cases count`, label2 = as.factor(date),
text = paste("country:", `Country/Region`))) +
geom_tile(col=1) +
theme_bw(base_line_size = 0, base_rect_size = …
Run Code Online (Sandbox Code Playgroud) 目标: 我正在尝试使用 plotly(通过 ggplotly)创建 ggplot2 地图的交互式版本。
问题: Plotly 在图表上方和下方添加额外的空间,而不是像它应该的那样“拉伸”图表(例如,参见图片)。
例子
我想要什么(在 ggplot2 中制作的示例):
我得到了什么(以情节制作的例子):
我知道 ggplotly 不支持 aspect.ratio 但是有没有其他方法可以在保持 x 轴 (-12,2) 和 y 轴 (50,60) 限制的同时删除上下空间
代码:
library(maps)
library(ggplot2)
library(plotly)
boundaries <- ggplot2::map_data("world", region=c("UK","Ireland","France","Norway"))
map <- ggplot() +
geom_polygon(data=boundaries, aes(x=long, y=lat, group=group), color="black", fill="white") +
coord_sf(xlim=c(-12, 2), ylim=c(50,60)) +
theme(aspect.ratio = 1.2)
show(map)
visual <- ggplotly(map, height=1.2*400, width=400, tooltip=c("text"), hoverinfo='hide',
dynamicTicks=F) %>%
layout(xaxis=list(autorange=F, range=c(-12, 2)), yaxis = list(autorange=F, range=c(50,60)))
show(visual)
Run Code Online (Sandbox Code Playgroud)
要复制问题:
操作系统:Windows 10
IDE:RStudio
R:R 3.6.1