본문 바로가기

분류 전체보기

(284)
막대 그래프 (Bar Chart) 그리기 원칙 데이터를 시각화하는 데 있어, 아마도 가장 흔하게 사용되는 그래프가 막대그래프일 것입니다. 사각형의 높이로 값을 나타내서 비교하는 것이기에, 그리는 입장에서는 네모진 막대를 몇 개 그리면 되는 것이고, 보는 입장에서는 사각형의 높이만 보면 되는 것이기에 한눈에 이해가 됩니다. 우리 뇌가 이러한 높고 낮음에 대한 분별을 잘하도록 진화되었는지도 모릅니다. 여하튼, 이러한 제일 간단하다는 막대그래프도 막상 그려놓고 보면 뭔가 이상할 때가 있습니다. 여기서는, 막대그래프를 그릴 때 자주 실수하는 부분들과 고쳐진 모습, 좀 더 예쁘고 명확하게 표현할 수 있는 방법들을 서로 비교해가며 알아보겠습니다. 막대의 출발점은 항상 0이어야 한다. 아래 도표는 경상남도/북도, 전라남도/북도의 인구수를 보여줍니다. 오해의 소지..
파이썬으로 동영상 만들기 ? 제목 그대로입니다. 프로그램 코딩만으로 동영상을 만들 수 있을까요? 뭐 사실 못 만들 거야 없겠지만, 왜 그래야 하는 거지?라고 생각하실지도. 그런 분을 위해 아래 동영상을.... 똬악~ 아니면 이런, 공통점이 있죠? 사람의 손으로는, 일반 영상 편집 툴을 써서는, 만들 수는 있을지 모르겠으나 엄청난 막노동이 수반되는다는. 이런 거는 아예 못 만들겠죠? 물론, 이런 일반적인 텍스만 나오는 동영상도 가능하고, 이런 재미있는 것도, 제일 적합한 것은, 이런 동영상을 만들 때죠. 네. 이런 동영상이 코드 몇 줄이면 완성됩니다. manim이라는 라이브러리를 쓰고 파이썬으로 코딩하면 됩니다. 파이썬 코딩을 할 줄 안다면, manim 라이브러리를 깔고, 바로 자신의 동영상을 만들 수 있습니다. 좀 익숙하게 만들려면..
[42]Transform (2) CyclicReplace def cyclic(self): tri = Triangle().to_edge(LEFT, buff=0.5) square = Square() circle = Circle().to_edge(RIGHT, buff=0.5) group = VGroup(tri, square, circle) self.add(group) self.wait() self.play(CyclicReplace(tri, square, circle), run_time=4) self.wait() ScaleInPlace def scale(self): tri = Triangle().to_edge(LEFT, buff=1) square = Square() circle = Circle().to_edge(RIGHT, buff=1) gr..
[41]Transform(1) class TransformTest(Scene): def construct(self): self.transform_to_target() # self.cyclic() def get_text(self, str): return Text(str, size=0.5, color=YELLOW, stroke_width=0) def transform_to_target(self): self.left_name = self.get_text("A").shift(UP * 2 + LEFT * 3) self.right_name = self.get_text("B").shift(UP * 2 + RIGHT * 3) self.square = Square().shift(LEFT*3) self.circle = Circle(fill_opacit..
[40]Moving/Rotating class MovingRotating(Scene): def construct(self): ani_classes = { "MoveAlongPath": (MoveAlongPath,), "Rotate": (Rotate,), "Rotating": (Rotating,), "TurnInsideOut": (TurnInsideOut,), } idx = 1 for name, ani in ani_classes.items(): if name == "MoveAlongPath" : self.move_along_path(idx, name) elif name == "Rotate": self.rotate(idx, name) elif name == "Rotating": self.rotate(idx, name) elif name == ..
[39]Indicating class IndicatingTest(Scene): def construct(self): self.indicating() def indicating(self): ani_classes = { "ShowCreationThenDestruction": (ShowCreationThenDestruction,), "Indicate": (Indicate, ), "WiggleOutThenIn": (WiggleOutThenIn,), "ApplyWave": (ApplyWave, ), } ani_classes_need_pre_exist={ "CircleIndicate": (CircleIndicate,), "FocusOn": (FocusOn,), "Flash": (Flash,), "ShowPassingFlashAround": ..
[38]Animation: Creation Showing def showing(self): text = Text("Hello. This is animation test", size=0.5, stroke_width=0) circle1 = Circle(radius=1) circle2 = Circle(radius=1, fill_color=YELLOW, fill_opacity=1) line = Line(LEFT,RIGHT, stroke_width=10).set_width(4) circles = VGroup(circle1, circle2) text.next_to(circles,UP) circles.arrange(RIGHT) line.next_to(circles,DOWN) mobs = VGroup(text,circles,line) ani_classes = ..
[37]Animation's rate_func def graph_rate_func2(self): axes = Axes( x_axis_config={ "unit_size": 2, } ) funcs = [smooth,linear,rush_into,rush_from, slow_into,double_smooth,there_and_back,there_and_back_with_pause, running_start,wiggle, lingering,exponential_decay, ] func_names = ['smooth','linear','rush_into','rush_from', 'slow_into','double_smooth','there_and_back','there_and_back_with_pause', 'running_start','wiggle', '..
[34]GraphScene class GraphSceneTest(GraphScene): CONFIG = { "x_axis_label": "", "y_axis_label": "", "x_min": 0, "x_max": 15, "x_axis_width": 12, "y_min": 0, "y_max": 0.5, "y_axis_height": 6, "y_tick_frequency": 0.125, "graph_origin": 2.5 * DOWN + 5.5 * LEFT, } def construct(self): self.setup_axes() self.y_axis.add_numbers( 0.25, 0.5, 0.75, 1, number_config={ "num_decimal_places": 2, }, direction=LEFT, ) self.x..
[33]NumberPlane plane = NumberPlane() self.add(plane) self.wait() plane = NumberPlane() axes = plane.get_axes() x_axis = axes[0] y_axis = axes[1] print("x_axis:") print(" x_min:", x_axis.x_min) print(" x_max:", x_axis.x_max) print(" unit_size:", x_axis.unit_size) print("y_axis:") print(" y_min:", y_axis.x_min) print(" y_max:", y_axis.x_max) print(" unit_size:", y_axis.unit_size) x_axis: x_min: -7.11111111111111..