pie가 레거시가 되었습니다. R2023b부터는 piechart가 권장됩니다. 기본 동작은 pie와 비슷하게 데이터를 바로 넣으면 됩니다. data = [1, 2, 3, 4];piechart(data) 마우스를 올리면 해당 조각의 정보를 보여줍니다. 각 조각에 이름을 붙이고 싶다면 data 뒤에 레이블을 넣어주면 됩니다. data = [1, 2, 3, 4];piechart(data, ["Rust", "C++", "Python", "Matlab"]) Categorical 자료를 넣으면 알아서 개수를 세서 그려줍니다. responses = categorical([ "MATLAB", "Python", "C++", "MATLAB", "Python", ... "Python", "C++", "J..
매트랩 커뮤니티에 MATurtle 코드를 올렸다. 파이썬의 turtle을 매트랩에서 그대로 구현한 것이었다. 코드 리팩토링 과정에서 ChatGPT의 도움을 많이 받았는데, 가장 도움 받은 것은 클로저(closure)였다. MATurtle에서 클로저가 어떻게 쓰였는지는 나중에 따로 설명하기로 하고, 이번 글에서는 매트랩에서 클로저를 만들고 사용하는 방법에 대해 알아본다. 간단히 말하자면, 클로저는 함수(동작)에 변수(상태)를 묶어서 관리할 수 있는 유닛이다. 함수와 변수를 묶는다고 하면 클래스가 먼저 생각나지만, 매트랩에서 클래스를 만들려면 별도의 M-파일을 만들어야 하는 번거로움이 있다. 클로저는 하나의 파일 안에서 nested function을 이용해서 구현할 수 있다. 예제를 먼저 보자. fu..
지난 글에서 추가된 기능- 함수화 하였음 (chat_race.m)- 날짜 단위로 끊는 기능 (dayChunk)- 여전히 개수 단위로도 끊을 수 있음 (NChunk)- 제외할 username 지정 가능 (nameExclude)- 어디서 끊을지 정하지 않으면 기본값은 7일 단위로 끊는 것 % 10일 단위로 끊기chat_race(file, dayChunk=10)% 1000개 단위로 끊기, "방장봇" 제외chat_race(file, NChunk=1000, nameExclude="방장봇")% 7일 단위로 끊기chat_race(file) 전체 코드 function chat_race(file, opts)arguments file opts.dayChunk (1, 1) = 7 opts.NChunk (1..
Angelo님의 블로그에서 "꿈틀 꿈틀 움직이는 바 그래프를 그려봅시다"라는 글을 본 적이 있다. 신기해서 나도 써먹어보려고 했으나 마땅히 적용할 데이터가 없어서(...) 미루고 있던 차에, 단톡방 통계를 내 달라는 퀘스트를 받았다. 그냥 특정 기간 동안 말 많이 한 사람을 추려내는 건 정규식 지옥만 빼면 쉽다. 하지만 이왕이면 꿈틀 꿈틀 움직이는 그래프면 더 재밌지 않겠는가. 그런데 해당 글을 다시 보니 문제가 있음을 깨달았다. 오리지날 코드는 데이터가 아래와 같이 timetable 형태여야 한다. 위 데이터는 일본의 각 현의 인구수 변화이다. 첫 번째 column은 시간(년도)이고, 두 번째부터는 시간에 대한 인구수 데이터이다. 반면 단톡방 대화내역은 아래처럼 생겼다. 두 가지 작업을 해야 한다..
정확히는 코랩에서 매트랩을 띄우고 돌린다고 해야 맞는 표현이다. 후술하겠지만 코랩에서 MATLAB Online 환경을 띄우고 매트랩 엔진을 코랩에서 가져와서 쓸 수 있다. 아래 내용은 위 영상을 요약한 것이다. 먼저 코랩에 가서 터미널을 연다. mpm(matlab package manager)을 가져오고 매트랩 설치를 해야 하는데, 배치 파일을 위 영상의 제작자인 Yann Debray가 이미 만들어뒀다. 굳이 긁어서 붙일 필요는 없고, 아래를 실행하여 파일을 가져오면 된다. https://gist.githubusercontent.com/yanndebray/e267617c78a3f24c875cb57570bdd3b9/raw/1b9dce314770da627ecaf162bc1a3ecc5748a99..
어느 날 퇴근길 생각의 흐름 어? 지금 나오는 곡 뭐지? 템포가 딱 좋은데? 박자 맞춰서 걷기 딱 좋은 템포잖아? 이거 bpm이 얼마쯤 되는거지? Stayin' alive보다 빠르니까 100보다는 확실히 높을거 같은데?110쯤 되려나? 어떻게 측정하지? 아이폰에서 bpm 측정하는 앱이 있나?뭔가 있네. 앱 이름이 bpm이네. ㅋㅋ 오호. 109 bpm이네.이거랑 비슷한 bpm의 곡들을 모아서 플리를 만들까?뭐가 있지? 일단 타샤니의 경고가 비슷할 것 같고.Emotional oranges 노래들도 대충 비슷할거 같은데?그러고보니 예전에 100 bpm 근처의 곡들을 모아둔 적이 있는데, 그거랑 합쳐야겠다.일할 때 듣는 플리 이름이 work song이니, 이건 walk song으로 하면 되겠지? ㅋㅋ근데 이 ..
이 글은 정규식 삽질의 기록이며, 나중에 내가 같은 패턴을 쓸 일이 있을 때 찾아보기 위함이다. 애증의 정규식 1탄애증의 정규식 2탄애증의 정규식 3탄 과제 1. 마크다운 헤딩이 2단계일 때에도 잘 변환해야 한다.- Heading level 1은 숫자가 안 들어가므로 추가해줘야 한다.- 그 이하의 level은 숫자가 들어가므로 그대로 두어도 된다. 예시)>[간단한 출력: disp]>[포맷팅 출력: fprintf]>>[2.1 formatSpec]>>[2.2 변환 문자]>>[2.3 이스케이프 문자]>[format으로 출력 표시 형식 지정] 를 아래처럼 바꿔야 한다. >[1. 간단한 출력: disp]>[2. 포맷팅 출력: fprintf]>>[2.1 formatSpec]>>[2.2 변환 문자]>>[2.3 이스..
이 글은 정규식 삽질의 기록이며, 나중에 내가 같은 패턴을 쓸 일이 있을 때 찾아보기 위함이다. 애증의 정규식 1탄애증의 정규식 2탄 게으른 매트랩 인덱싱 파트를 쓰던 도중, 애증의 정규식 1탄에서 걱정했던 일이 발생했다. 마크다운에서 헤딩 텍스트에 한글이 들어가면 링크에서는 없애야 한다. 정확히는, 1. 숫자와 알파벳, 즉 alphanumeric는 그대로 남긴다.2. 그 외의 문자는, alphanumeric 사이에 있는 것들은 묶어서 하이픈 하나로 바꾼다.3. Trailing 하이픈은 모두 없애버린다. 이게 말로 하면 좀 어려운데, 쉽게 말해 아래처럼 바꾼다. 123가나다abc → 123-abc1가2나3다 → 1-2-3가나다a123bc → a123bc 즉, 남길 문자 사이에 non-alphanumer..
매트랩으로 시각화 예제를 만들면서 이미지를 회전시켜야 할 일이 있었다. 하나의 Axes 위에 다른 객체는 그대로 놔두고 Image object만 회전시켜야 했는데, 정보 손실이 없어야 해서 imrotate는 사용하기 어려운 상황이었다. 찾아보니 rotate라는 함수가 Image object도 회전시킨다고 나왔다. 그런데 막상 해보니까 안되는 거다. 그래서 어쩔 수 없이 Axes를 2개 만들어서 Image를 올린 Axes만 회전시켰다. 해당 이슈를 매트랩 단톡방에 공유했고, 도움말에 오류가 있는 것으로 판명이 났다. 정식으로 이슈 등록되었고, Answers에 Support team의 글도 올라왔다. 요컨대 Image object에는 ZData가 없기 때문에 안된다고 한다. 지금은 rotate 함수의 설명에..