質問
GGVISプロットにタイトルを追加したい。私はどこにでも例を見つけることができません。他のRプロット、例えば、他のRプロットでも簡単です。
library(ggplot2)
library(ggvis)
x <- 1:10
y <- x^2
df <- data.frame(x, y)
plot(x, y, main = "Plot Title") # Base R with title
ggplot(df, aes(x, y)) + geom_point() + ggtitle("Plot Title") # ggplot2 with title
df %>% ggvis(~x, ~y) %>% layer_points() # ggvis but no title??
.
私が明白なものを逃しているように感じます。あらゆる助けがあります。
解決
ええと、まだ実装されていない(または文書化されていません)。私はこれをすぐに追加されることを確信しています。今のところ、あなたはそのような汚れたハックを使うことができます:
df %>% ggvis(~x, ~y) %>% layer_points() %>%
add_axis("x", title = "X units") %>%
add_axis("x", orient = "top", ticks = 0, title = "Plot Title",
properties = axis_props(
axis = list(stroke = "white"),
labels = list(fontSize = 0)))
.
さらに、このハックを複数回使用したい場合は、省略形を作成できます。
add_title <- function(vis, ..., x_lab = "X units", title = "Plot Title")
{
add_axis(vis, "x", title = x_lab) %>%
add_axis("x", orient = "top", ticks = 0, title = title,
properties = axis_props(
axis = list(stroke = "white"),
labels = list(fontSize = 0)
), ...)
}
df %>% ggvis(~x, ~y) %>% layer_points() %>% add_title() #same as before
df %>% ggvis(~x, ~y) %>% layer_points() %>% add_title(title = "Hello", x_lab = "ton")
.
編集:
今下記の重なりを固定して、メインタイトルとX軸ラベルの両方を同時に設定できます。
他のヒント
また、タイトルのフォントサイズを変更するには、このコードを使用してください(@ Tonytonovの回答から適応されます):
add_title <- function(vis, ..., x_lab = "X units", title = "Plot Title")
{
add_axis(vis, "x", title = x_lab) %>%
add_axis("x", orient = "top", ticks = 0, title = title,
properties = axis_props(
axis = list(stroke = "white"),
title = list(fontSize = 32),
labels = list(fontSize = 0)
), ...)
}
. デフォルトのX軸を干渉しないように@ Tonytonovの答えを更新しました。それはまだ軸として実装されていますが、独自の「タイトル」スケールを実装し、軸を見えないようにするために必要なデフォルトのプロパティを使用して、FontSizeとColorなどのユーザー提供のタイトルプロパティを正しくマージします。このバージョンは特定の背景色を推定せずに軸を隠します。 3つの例は関数に従います。
library(ggvis)
# ggvis lacks a plot title function, so add one.
# based on clever hack by tonytonov
# http://stackoverflow.com/a/25030002/1135316
add_title <- function(vis, ..., properties=NULL, title = "Plot Title")
{
# recursively merge lists by name
# http://stackoverflow.com/a/13811666/1135316
merge.lists <- function(a, b) {
a.names <- names(a)
b.names <- names(b)
m.names <- sort(unique(c(a.names, b.names)))
sapply(m.names, function(i) {
if (is.list(a[[i]]) & is.list(b[[i]])) merge.lists(a[[i]], b[[i]])
else if (i %in% b.names) b[[i]]
else a[[i]]
}, simplify = FALSE)
}
# default properties make title 'axis' invisible
default.props <- axis_props(
ticks = list(strokeWidth=0),
axis = list(strokeWidth=0),
labels = list(fontSize = 0),
grid = list(strokeWidth=0)
)
# merge the default properties with user-supplied props.
axis.props <- do.call(axis_props, merge.lists(default.props, properties))
# don't step on existing scales.
vis <- scale_numeric(vis, "title", domain = c(0,1), range = 'width')
axis <- ggvis:::create_axis('x', 'title', orient = "top", title = title, properties = axis.props, ...)
ggvis:::append_ggvis(vis, "axes", axis)
}
# add title with default X axis.
iris %>%
ggvis(x = ~Petal.Width) %>%
layer_points(y = ~Petal.Length, fill = ~Species) %>%
add_title(title = "Petal.Width vs. Petal.Length")
# Add title with overridden X axis
iris %>%
ggvis(x = ~Petal.Width) %>%
layer_points(y = ~Petal.Length, fill = ~Species) %>%
add_axis("x", title = "X-axis!!!!", title_offset=40,
properties = axis_props(title=list(fontSize=16),
labels = list(fontSize = 12))) %>%
add_title(title = "Petal.Width vs. Petal.Length")
# Change the font size of the title.
iris %>%
ggvis(x = ~Petal.Width) %>%
layer_points(y = ~Petal.Length, fill = ~Species) %>%
add_title(title = "Petal.Width vs. Petal.Length",
properties = axis_props(title=list(fontSize=20)))
. 所属していません StackOverflow