পয়েন্ট স্থির থাকে এবং লাইন বিবর্ণ হয় যেখানে স্বল্প পরিকল্পনা


11

এখানে স্ট্যাটিক প্লটের একটি পুনরুত্পাদনযোগ্য উদাহরণ, যা আমি অ্যানিমেট করতে চাই (একটি এমসিএমসি নমুনা কীভাবে আচরণ করে তা আমি দেখতে চাই)।

library(tidyverse)
library(gganimate)

set.seed(1234)
plot_data <- tibble(x=cumsum(rnorm(100)),
                    y=cumsum(rnorm(100)),
                    time=1:length(x)) 

ggplot(data=plot_data,
       aes(x=y, y=x)) +
  geom_point() + geom_line()

এখানে চিত্র বর্ণনা লিখুন

আমি যা দেখতে চাই তা হল পয়েন্টগুলি অঙ্কিত হওয়ার পরে দৃশ্যমান হচ্ছে এবং পরে কিছুটা বিবর্ণ হবে (যেমন আলফা উদাহরণস্বরূপ 1 থেকে 0.3 থেকে যায়), যখন একটি লাইন থাকবে যা কেবল সাম্প্রতিক ইতিহাস দেখায় (এবং আদর্শভাবে বিবর্ণগুলি দেখায় সাম্প্রতিকতম ইতিহাসে সর্বনিম্ন বিবর্ণ এবং কয়েক ধাপেরও বেশি সম্পূর্ণ অদৃশ্য হয়ে যায়)।

নীচেরগুলি আমার পয়েন্টগুলির জন্য আমি কম বেশি যা অর্জন করতে চাই তা অর্জন করে (সুতরাং এক অর্থে আমি এই কয়েকটি সংযোগের সাথে কেবল বিবর্ণ লাইন যুক্ত করতে চাই - কিছু ফ্রেমগুলি ধীরে ধীরে ধীরে ধীরে বিবর্ণ হওয়া আরও সুন্দর হবে):

ggplot(data=plot_data,
       aes(x=y, y=x)) +
  geom_point() +
  transition_time(time) +
  shadow_mark(past = T, future=F, alpha=0.3)

পয়েন্টগুলি কীভাবে হ্রাস পাবে তা দেখানো প্লট

আমি যেটির সাথে লড়াই করছি তা হ'ল দুটি রত্ন সম্পর্কিত উদাহরণ এবং পংক্তির জন্য দুটি পৃথক আচরণ কীভাবে যুক্ত করা যায়। উদাহরণস্বরূপ নীচের পয়েন্টগুলি অদৃশ্য হয়ে যায় (আমি সেগুলি চাই না) এবং লাইনগুলি বিবর্ণ হয় না (আমি সেগুলি চাই)।

p <- ggplot(data=plot_data,
       aes(x=y, y=x)) +
  geom_point() +
  transition_time(time) +
  shadow_mark(past = T, future=F, alpha=0.3)

p + geom_line() +
  transition_reveal(along = time) +
  shadow_mark(past = T, future=F, alpha=0.3) 

উত্তর:


17

shadow_*একবারে একাধিক আচরণ নিয়ন্ত্রণ করতে অন্তর্নির্মিত ফাংশনগুলি ব্যবহার করতে আমার সমস্যা হয়েছিল ; দেখে মনে হচ্ছে এটি সর্বাধিক সাম্প্রতিক প্রয়োগ হয়েছে। (গ্র্যানিমেট 1.0.3.9000 ব্যবহার করে)

এটির কাছাকাছি যাওয়ার একটি উপায় হ'ল রূপান্তরগুলি ম্যানুয়ালি গণনা করা। উদাহরণস্বরূপ, আমরা 100 বার ডেটা অনুলিপি করতে পারি, প্রতিটি ফ্রেমের জন্য একটি করে অনুলিপি এবং তারপরে আমাদের পয়েন্ট লেয়ারের জন্য আলফা এবং আমাদের সেগমেন্ট স্তরটির জন্য আলফা আলাদাভাবে নির্দিষ্ট করে দিতে পারি।

plot_data %>%
  uncount(100, .id = "frame") %>%
  filter(time <= frame) %>%
  arrange(frame, time) %>%
  group_by(frame) %>%
  mutate(x_lag = lag(x), 
         y_lag = lag(y),
         tail = last(time) - time,
         # Make the points solid for 1 frame then alpha 0.3
         point_alpha = if_else(tail == 0, 1, 0.3),
         # Make the lines fade out over 20 frames
         segment_alpha = pmax(0, (20-tail)/20)) %>%
  ungroup() %>%

  ggplot(aes(x=y, y=x, xend = y_lag, yend = x_lag, group = time)) +
  geom_segment(aes(alpha = segment_alpha)) +
  geom_point(aes(alpha = point_alpha)) +
  scale_alpha(range = c(0,1)) +
  guides(alpha = F) +
  transition_manual(frame)

এখানে চিত্র বর্ণনা লিখুন

(এই রেন্ডারটির জন্য, আমি এটি মুড়িয়ে রেখেছি animate( [everything above], width = 600, height = 400, type = "cairo"))


1
আপনাকে অনেক ধন্যবাদ. আপনার উত্তরের একটি গৌণ সমস্যা: পয়েন্ট_সালফা = ... এবং বিভাগ_আલ્ফা = ... এর পরিবর্তনের (...) এর ভিতরে থাকা দরকার। সেই অনুযায়ী উত্তরটি সংশোধন করা হয়েছে।
বিজরন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.