diff --git "a/persisted/docstore.json" "b/persisted/docstore.json"
--- "a/persisted/docstore.json"
+++ "b/persisted/docstore.json"
@@ -1 +1 @@
-{"docstore/metadata": {"6eea93d1-39a8-4ec5-9b8c-389a7d6124d7": {"doc_hash": "5106e8f825f6cd70eece07b4e7c068d96f2edee5bbecc54b3bcf77aa4cb742a5"}, "c4b26310-14a9-4f28-9bd0-14ed5df9018c": {"doc_hash": "27035eda13ad99d84c7d668eafe6922b78d0a9f94ddbd933d809d68e71f9c0ec"}, "18df4da0-7e19-45ea-9333-9ca142034120": {"doc_hash": "e36768227b6393bd46fdd4f87137e52e93f5b45f695c6a33f5ae5f0b94e66566"}, "7ca09af5-c0b0-4544-a74f-8652e3a0afb4": {"doc_hash": "1abfa510bfb0e51825a0c9d47e421a1194ebb7505e6ac07f09fddf307dbfbd14"}, "d162d0f4-b40a-4ba0-a422-87e0d4249c2b": {"doc_hash": "8c8d2503011b285797e05bdb9a6393f0380ba94d7c39575c884c9ac9478aca63"}, "7e6a8696-a4e6-459b-8c22-3c88de3a4f3d": {"doc_hash": "a58a078a69262f19fca065dd887618eb3a089e0afffb38f487bff7120398858f"}, "31c09404-4e75-48ec-a432-04c10811345b": {"doc_hash": "1faac8db3e17a831a03977632b5c8c0546f646c1f80aa225697307fd0cf52135"}, "6a36d099-ba6a-45f3-8c65-c1ca56cbe7a5": {"doc_hash": "7833fe2047cd3319ad74b701cd4ee1f7d86a48fe52f96fc3a689b6ebf873d402"}, "a9da5089-13fa-4881-a005-00e37c3398c7": {"doc_hash": "22fc5e3c7f88292a3474d13e8527712d7912b0f944d8035b08289b3b573337a9"}, "6de6fd75-c2dd-4ddd-a13e-a06d59ef3924": {"doc_hash": "aba08453a1ca4a328c34aff575a38403085c858f03f7eb454ae8ca0e68e0d143"}, "18858e5b-02c8-46a0-b1ce-80add02da61e": {"doc_hash": "00a56e3d18a000bce60299fbb90d78a9280ef6bc11fc12aad690e6b9f44dc9bc"}, "96eb20de-84b1-4467-908a-59e041bc4cdf": {"doc_hash": "89f3ffbac12dda19427989a9b57cbeb4e1d65c53fd6cef2c806c4f8494e850d8"}, "ce2f59a7-3841-4efe-9aee-8007ca48ef7c": {"doc_hash": "6ba03249d1c3935ef4cce22052ce43533a1bb2f02d77aea4233c079d69d339dd"}, "89a535b3-8fd3-4640-aa09-a3478dd48b80": {"doc_hash": "08d635c4c9b994f5476e97ecdd807af1f6087c0b91a9999e5732f43a81a7c144"}, "33403c52-9b09-449b-815d-c130f4dac152": {"doc_hash": "80bba941caba3ab64a2aa4e552ab3757236b2e37967225353de64f52d28f4051"}, "7330d96d-c6fa-43ab-8fa3-6e4e14915b8c": {"doc_hash": "fe406bc7e7d87a50c3d3d98c031f95ffcad10a76deaa5748809668ac38ac24a9"}, "e0104155-829c-419d-9c39-5d1d6d6a084f": {"doc_hash": "218f8fcc00b1b8d94a154901c90a4b380fe7e1a8fc5ace3ff1c1dbeeea6e7b69"}, "c038d2e0-f2a8-49f2-8609-7316e87ac383": {"doc_hash": "c27fd9a95e4f72ba234bf95b723d3ced16d1ea09569eddb9794f0960679ef44b"}, "e07a805f-a626-4871-8d38-2ff34156fb8e": {"doc_hash": "8d6b6b7dc6faaba41d94e68d5affbc691236861b4d5b0aebeacb8d56f2b8be5b"}, "75107a9d-2ab6-4a58-bfd3-3f007a8c6c35": {"doc_hash": "3289f55a7a047fce4f665423aed57a652ad8d5e05b2d350db432f822a21c7e3d"}, "3cead9ea-c177-43b3-949f-17474df6b846": {"doc_hash": "0b008af47364bb4f0b1087b783470743681814767bdbdc7478539277c9459dad"}, "a8c4d253-a257-411c-a861-a7ebbaa9deff": {"doc_hash": "b7084a54c9608feebec1a9f0d03cb2b90af62e47ce7a266082c79af717946026"}, "8767175a-ed97-4f86-8298-586916ebf3bc": {"doc_hash": "d0e666a8ea75f032fcea32aa9e8a971a5b6502f7fc3da2b719c781462db11137"}, "ad484503-aafe-4c7d-8f5b-fc1db95ba96b": {"doc_hash": "3f2990f039075a84fc54e971cd582fb41e1e9ab4a4e451704cde8cac4fa83884"}, "87e3ac7c-50fd-419f-9b05-9998bf4dc06d": {"doc_hash": "20ed7efcfb4c0cba79dd8d1687a3a34b48ea8e5b142caec0bad3eadedf5e6e4e"}, "bfa4f175-b3e0-465e-8a66-280cfecb3c77": {"doc_hash": "0043a03aaf2875bf36afe0d79a314239f2a2019ba16bd8cae1a4d5c0ace772ed"}, "94be5b1a-40f1-4c65-a6cc-703cce79d8af": {"doc_hash": "edd8865d752f5f7b67ccb81f61de03add56404013346518bb3959bad83161e1f"}, "b6368f5c-6ef3-445e-8438-1d79dd935241": {"doc_hash": "77d61ece6d7bb5d4514899ec2b1b1a101bb724208b4156d15918f2493c7ac088"}, "08fd0d36-5043-4e09-b2ed-f5412bc963b0": {"doc_hash": "73209c450985c1c08e55dc91c5fc3fbc637de8f24e32656d78a41c906be0c3db"}, "3fa5eda3-1cf2-4058-90a3-4afae2a72f2a": {"doc_hash": "b4ecf579682378ab0cdd5fdf619425cf1e82572e42241bbbb58208370743183a"}, "2b0921c5-a4fd-48e9-b5d6-b2c51ee1e38c": {"doc_hash": "20b8941b791bcda4d6e3c04ff8332fcf267f9796fc10e23af6d9ed4adb937383"}, "0b265505-a030-47dd-bb53-7708f99cdd79": {"doc_hash": "e07a298854b7a86fbde5f0ef30e9d8bb15748255c4b39270d37a35f639ea7392"}, "f13e8942-1cdb-42a4-a667-5bee5ee17dda": {"doc_hash": "6bca7681432fc9f0428c405b49a8f432c4ca0d82376c31a4560307309f49b33d"}, "093d230a-2ae9-4416-aa95-088a256a0432": {"doc_hash": "3860285a991d7f06214dd91cf364bdb609491acd27e65c8eabe0e4e76b92bf25"}, "ad2f0614-b88a-4e84-aa20-e1b234063207": {"doc_hash": "5dc1ab39c35f90fd5679b9e03e256f406e41783ad7ad3f90be3f23ac1e927a87"}, "919e3576-6ad7-4fca-8de8-f08706787d07": {"doc_hash": "faba2fbbb395756e451b7ff3e8d6ba37c4d1b5f8aca9eb6bd394606246887b97"}, "6eb13c66-467e-458b-a45c-9ff5d1cb2bdd": {"doc_hash": "42386086097fe1aa3c436e6ab07e09b9e1da4330a46c953f89d71afc615bd68a"}, "34118d72-6677-4cb0-bca9-5e23eba07a99": {"doc_hash": "bcbcb9e5d49fb856025a8c2503c429959ec4e6b90edf6d06ad34468179abca6d"}, "98c9128e-e18f-4acb-a9f1-df7b78632218": {"doc_hash": "31a7cfa9448176ef4a4cb83837cbdfe68b0f8825e8e4cfd03493601da677ea99"}, "ffd0022d-eb0c-4384-8c0c-9643d9427ae6": {"doc_hash": "63140a07984e9d4acf3ed1de58371794909dc5c0a7257de7e76d56b0ac7fcf99"}, "b4e4994a-3d8d-4e8b-88c0-7baf26a4f02d": {"doc_hash": "71fe717fa318197283482607317511aed9aa8371f51a91354facb95d78a2f8e0"}, "be4a3c3e-aeb9-4a74-a462-ffa29fafebd9": {"doc_hash": "8094bc568f57d3274fd519c7ca10571a95a427efac4f310aed6b5d7792109041"}, "83a32b7d-16d3-4c97-b06c-f0f2145a53dd": {"doc_hash": "e5dcf4add5f8ec9c2f1c05da1c929aeee52f9089425665176321ab562156fe35"}, "7d8b202f-8ac0-4be2-85d8-cab9fe32d876": {"doc_hash": "d5d89e5b4b1876c84dd279021eb3c56555816099718442b4a8df270cf0b47073"}, "8c4004aa-668f-4498-92eb-d04c71890e50": {"doc_hash": "8926d512cb313d15b500ffcad6ccc7130f99275a323b51ea4619ee5c130c7869"}, "774d786d-66d4-4457-a7e3-827c0e224672": {"doc_hash": "d84248de5b262dbd48c63a3d31363fa92973a950dc79725fbcacf95fc83a92ba"}, "e3f3f66b-979b-43f3-9c2b-c2c08dfeee0f": {"doc_hash": "801d2e5f0ab008f66eb7dbce43273bebbabe7d4cb489cca5461cc4931e893662"}, "f2c584b6-3b4f-4e5b-89af-9cdfe1ba7cc0": {"doc_hash": "d8cc1bbeed247da1b1f5c00a03e63a1cce7b9e341c01d91814de726df74e680a"}, "1021a791-38e3-43c3-8d56-4530955eccab": {"doc_hash": "301feca4e22e2d637684e4d9e97cc8582dfb2c15ceab62d686237fd497c98e5c"}, "fef4bb17-4279-4b00-9142-7fb6e0aa3e33": {"doc_hash": "cd976bed21d671ca72b19c5757d8fb861dc6753bd8a854d3284a16386f6324ea"}, "b4b07d3e-5bc2-4946-8bf4-9c55bf5e9b08": {"doc_hash": "c602c13a302d0f9c1e0d72343b9c6005f752fd89b31152b60e7954a27319a7f9"}, "2a2aa44b-fba3-4f45-85bb-fa5cbb7e62f2": {"doc_hash": "eda08d17998044e3f101baf541735db11b4cf2cd152d6ce011240a8575661fc8"}, "6d1ce441-8817-4c67-ac78-4a5145b10208": {"doc_hash": "dcd8f9027eccd41983fa3f8b76168b146a4fdd7746bd254d4bd5c31ccc95dc2a"}, "0d747b20-4035-4734-b036-60eaaec3cadc": {"doc_hash": "51ee20b52055cd92270984cf391ab77644bab6d08a5c33a8c000471dde8eca97"}, "b7a5e0d6-630b-40f9-ab32-0e90a5492b79": {"doc_hash": "084e8e691644b3a5178ca0ef5a829e4f4417004c0170c10655987fd06934c07a"}, "bb6d08ac-ca40-479f-bc9c-06c097d7c542": {"doc_hash": "5c42e32a4f184bdded90c8c08c3a16c878a5bff58734b0b6df349469d121bf92"}, "86a79bfd-2925-451d-ba58-38c78df04ee2": {"doc_hash": "4009dee51e05d685574cd008547b9b0ca05f701252c44c361338adedc85005cd"}, "e5db059f-174b-4a39-8157-4f37e06caeeb": {"doc_hash": "7d71988e5733757dbd1ec5abffa235acd347004ad404515f9b929b66d002654c"}, "6f30f486-7f33-4394-b0c3-52082fcc21ab": {"doc_hash": "7610721458ccae61912fc80e087af690d86e821f85e7850f73d9c0f76d7d1d40"}, "601c4637-9723-41e5-a1f7-8a66aa5d2be4": {"doc_hash": "c3fc2a97c1b6d720d6640368a20e0deeb05fdf23f902fafb545e50d5c2ede50c"}, "59617531-e5b3-461c-9d94-17b808b39ddc": {"doc_hash": "ff0ca050084dee6a66964adde212322e13efcfb89e56fb112f9d638c5befa3ac"}, "fb699c31-cab7-4cc3-a56e-e111215e93e0": {"doc_hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066"}, "a0d0bbe7-2a0a-4354-83cf-4f77f962c83a": {"doc_hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "ref_doc_id": "6eea93d1-39a8-4ec5-9b8c-389a7d6124d7"}, "1c9cf590-947f-422b-ae18-d871d1052e1a": {"doc_hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "ref_doc_id": "c4b26310-14a9-4f28-9bd0-14ed5df9018c"}, "81042881-e066-436b-9d7d-68fb67675dda": {"doc_hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "ref_doc_id": "18df4da0-7e19-45ea-9333-9ca142034120"}, "bacf1df5-b363-47d3-a08a-aba41b5e7654": {"doc_hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "ref_doc_id": "7ca09af5-c0b0-4544-a74f-8652e3a0afb4"}, "08a15300-109c-47cc-96f4-a6526893408d": {"doc_hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "ref_doc_id": "d162d0f4-b40a-4ba0-a422-87e0d4249c2b"}, "f4d4cd8f-e0a1-43d1-a411-2a0903d35909": {"doc_hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "ref_doc_id": "7e6a8696-a4e6-459b-8c22-3c88de3a4f3d"}, "8feb6918-5691-4fda-b973-3c582b06301a": {"doc_hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "ref_doc_id": "31c09404-4e75-48ec-a432-04c10811345b"}, "946b5ce4-1a23-4c63-a417-dd3284b9cb97": {"doc_hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "ref_doc_id": "6a36d099-ba6a-45f3-8c65-c1ca56cbe7a5"}, "6867f344-f104-45ad-91df-1f4bf2922ab4": {"doc_hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "ref_doc_id": "a9da5089-13fa-4881-a005-00e37c3398c7"}, "39ab16a8-7c77-4fdb-ad1b-3ffef505e555": {"doc_hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "ref_doc_id": "6de6fd75-c2dd-4ddd-a13e-a06d59ef3924"}, "a01cb84a-8780-498e-825a-3712c2a41c11": {"doc_hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "ref_doc_id": "18858e5b-02c8-46a0-b1ce-80add02da61e"}, "7ddcca1f-4bfd-4723-b22f-705ef7ca8f46": {"doc_hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "ref_doc_id": "96eb20de-84b1-4467-908a-59e041bc4cdf"}, "13069f2a-295c-404f-a102-64bbfb0ff58a": {"doc_hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "ref_doc_id": "ce2f59a7-3841-4efe-9aee-8007ca48ef7c"}, "4733be20-3bab-4dbd-8994-bc7d351c1c07": {"doc_hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "ref_doc_id": "89a535b3-8fd3-4640-aa09-a3478dd48b80"}, "c06dc94b-3c80-4e93-81f0-dbf209c95c75": {"doc_hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "ref_doc_id": "33403c52-9b09-449b-815d-c130f4dac152"}, "81114efe-ef34-48cc-95e2-2541ad847eca": {"doc_hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "ref_doc_id": "7330d96d-c6fa-43ab-8fa3-6e4e14915b8c"}, "2c48ea8f-4294-4e93-9458-c53c3c5fff09": {"doc_hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "ref_doc_id": "e0104155-829c-419d-9c39-5d1d6d6a084f"}, "6efea588-72a2-4a09-aa07-77f47d0d1335": {"doc_hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "ref_doc_id": "c038d2e0-f2a8-49f2-8609-7316e87ac383"}, "f4acd5c1-a743-4e10-8f56-76eec58cc734": {"doc_hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "ref_doc_id": "e07a805f-a626-4871-8d38-2ff34156fb8e"}, "313a382c-12d3-4ef1-bacb-cfc39731aba6": {"doc_hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "ref_doc_id": "75107a9d-2ab6-4a58-bfd3-3f007a8c6c35"}, "896dfa6b-13ad-4098-a82b-a2953fcb4e4b": {"doc_hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "ref_doc_id": "3cead9ea-c177-43b3-949f-17474df6b846"}, "5f213884-0e27-47dd-930a-b0055d30f6d0": {"doc_hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "ref_doc_id": "a8c4d253-a257-411c-a861-a7ebbaa9deff"}, "e3ea3af3-18ce-4bb9-a2ee-0c81a2c106e2": {"doc_hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "ref_doc_id": "8767175a-ed97-4f86-8298-586916ebf3bc"}, "026e53ee-7c11-46b4-8795-7a9c16829169": {"doc_hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "ref_doc_id": "ad484503-aafe-4c7d-8f5b-fc1db95ba96b"}, "4fa1e274-8a7e-4da7-a261-12073723c286": {"doc_hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "ref_doc_id": "87e3ac7c-50fd-419f-9b05-9998bf4dc06d"}, "16fa0dfe-1f7c-4d2f-a848-3f5b9a158885": {"doc_hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "ref_doc_id": "bfa4f175-b3e0-465e-8a66-280cfecb3c77"}, "34b99b21-2096-458e-8b7d-3f273709fdd9": {"doc_hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "ref_doc_id": "94be5b1a-40f1-4c65-a6cc-703cce79d8af"}, "5aa32771-5a65-442c-bbc8-4845e8b0ab7b": {"doc_hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "ref_doc_id": "b6368f5c-6ef3-445e-8438-1d79dd935241"}, "62a9c3dd-3119-41dd-a8fa-a3f81d09ccee": {"doc_hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "ref_doc_id": "08fd0d36-5043-4e09-b2ed-f5412bc963b0"}, "8e88f950-7b7d-42cb-9939-a90482f709dc": {"doc_hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "ref_doc_id": "3fa5eda3-1cf2-4058-90a3-4afae2a72f2a"}, "a13681e6-9734-478b-9208-affd351be458": {"doc_hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "ref_doc_id": "2b0921c5-a4fd-48e9-b5d6-b2c51ee1e38c"}, "48b5df67-6450-49a7-9af5-4dd2b56ae440": {"doc_hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "ref_doc_id": "0b265505-a030-47dd-bb53-7708f99cdd79"}, "7a98b790-175d-4801-979a-fcbda06e457f": {"doc_hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "ref_doc_id": "f13e8942-1cdb-42a4-a667-5bee5ee17dda"}, "eaadbd44-8ef6-4664-bef9-1601a50308da": {"doc_hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "ref_doc_id": "093d230a-2ae9-4416-aa95-088a256a0432"}, "03a3c696-449c-4791-ad09-19101e483f51": {"doc_hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "ref_doc_id": "ad2f0614-b88a-4e84-aa20-e1b234063207"}, "f9191bf0-28c4-400f-8b89-4d8e7d01db6b": {"doc_hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "ref_doc_id": "919e3576-6ad7-4fca-8de8-f08706787d07"}, "0ebe32f7-b5fb-4eb7-bc21-ee54a8a2b2a7": {"doc_hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "ref_doc_id": "6eb13c66-467e-458b-a45c-9ff5d1cb2bdd"}, "4e537f16-4aa2-413d-b34b-c56e70717547": {"doc_hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "ref_doc_id": "34118d72-6677-4cb0-bca9-5e23eba07a99"}, "df48f360-3575-4cd3-8763-1b67d18b4e9c": {"doc_hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "ref_doc_id": "98c9128e-e18f-4acb-a9f1-df7b78632218"}, "d2e30f48-710c-4349-8b5b-0e4f5c540f4c": {"doc_hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "ref_doc_id": "ffd0022d-eb0c-4384-8c0c-9643d9427ae6"}, "75016e1c-d447-4d02-b7ad-971eb14f8ce5": {"doc_hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "ref_doc_id": "b4e4994a-3d8d-4e8b-88c0-7baf26a4f02d"}, "7e2b5e99-72b2-4f6b-8ebb-aabff133a44d": {"doc_hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "ref_doc_id": "be4a3c3e-aeb9-4a74-a462-ffa29fafebd9"}, "473d7594-f1ff-413a-a082-38957cdd6c6a": {"doc_hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "ref_doc_id": "83a32b7d-16d3-4c97-b06c-f0f2145a53dd"}, "99632d21-4790-4c18-bb44-8c65d17bf5f6": {"doc_hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "ref_doc_id": "7d8b202f-8ac0-4be2-85d8-cab9fe32d876"}, "29198336-47fd-4285-98b8-2e960bedc128": {"doc_hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "ref_doc_id": "8c4004aa-668f-4498-92eb-d04c71890e50"}, "c2f045a7-5d6d-469d-acab-1b0944577f6f": {"doc_hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "ref_doc_id": "774d786d-66d4-4457-a7e3-827c0e224672"}, "81e18f74-501d-49b8-ba8c-00205d156624": {"doc_hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "ref_doc_id": "e3f3f66b-979b-43f3-9c2b-c2c08dfeee0f"}, "eae2f8ef-184c-494c-86d4-0496f49f373d": {"doc_hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "ref_doc_id": "f2c584b6-3b4f-4e5b-89af-9cdfe1ba7cc0"}, "3040c26b-957c-4195-866c-4fe0503c3983": {"doc_hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "ref_doc_id": "1021a791-38e3-43c3-8d56-4530955eccab"}, "4d678a08-ba14-4256-a99d-e71c28ec1f26": {"doc_hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "ref_doc_id": "fef4bb17-4279-4b00-9142-7fb6e0aa3e33"}, "a221fdea-1814-48e8-9405-9ce34ee55659": {"doc_hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "ref_doc_id": "b4b07d3e-5bc2-4946-8bf4-9c55bf5e9b08"}, "73d999ba-2efe-4273-91f9-1743a39a00e9": {"doc_hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "ref_doc_id": "2a2aa44b-fba3-4f45-85bb-fa5cbb7e62f2"}, "1015a4ae-4cd1-435a-b64e-ea85d10cb081": {"doc_hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "ref_doc_id": "6d1ce441-8817-4c67-ac78-4a5145b10208"}, "b0c2ee55-f4cf-4402-a059-0513d96a17ad": {"doc_hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "ref_doc_id": "0d747b20-4035-4734-b036-60eaaec3cadc"}, "0ed620a5-84ec-4518-bd1f-96b592520ff4": {"doc_hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "ref_doc_id": "b7a5e0d6-630b-40f9-ab32-0e90a5492b79"}, "ce2df8cf-7727-4ff1-b911-6406902cfa4e": {"doc_hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "ref_doc_id": "bb6d08ac-ca40-479f-bc9c-06c097d7c542"}, "3872b08f-6482-4cd8-bd9c-ccda1e87af2f": {"doc_hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "ref_doc_id": "86a79bfd-2925-451d-ba58-38c78df04ee2"}, "5e8e148d-5d1d-483d-a53b-7a88596bd559": {"doc_hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "ref_doc_id": "e5db059f-174b-4a39-8157-4f37e06caeeb"}, "047eae63-5926-43bc-9906-2584a2334791": {"doc_hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "ref_doc_id": "6f30f486-7f33-4394-b0c3-52082fcc21ab"}, "91285009-c0df-461e-9900-3a34cc1eb2c3": {"doc_hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "ref_doc_id": "601c4637-9723-41e5-a1f7-8a66aa5d2be4"}, "07adad9b-22ac-4667-969f-3227e5bea3d7": {"doc_hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "ref_doc_id": "59617531-e5b3-461c-9d94-17b808b39ddc"}, "cd1f8d63-989c-4a39-bdbe-0e818388323c": {"doc_hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "ref_doc_id": "fb699c31-cab7-4cc3-a56e-e111215e93e0"}, "0bd2e9d1-373a-466b-b07a-6ecfaff36dd8": {"doc_hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "ref_doc_id": "fb699c31-cab7-4cc3-a56e-e111215e93e0"}, "e9bde14e-c770-469f-92c4-338aed1a53bf": {"doc_hash": "e4284999019d8babe84c667d274b808f42360bf813fc13cbcfa2cc53b21afe6d", "ref_doc_id": "fb699c31-cab7-4cc3-a56e-e111215e93e0"}}, "docstore/data": {"a0d0bbe7-2a0a-4354-83cf-4f77f962c83a": {"__data__": {"id_": "a0d0bbe7-2a0a-4354-83cf-4f77f962c83a", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6eea93d1-39a8-4ec5-9b8c-389a7d6124d7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5106e8f825f6cd70eece07b4e7c068d96f2edee5bbecc54b3bcf77aa4cb742a5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1c9cf590-947f-422b-ae18-d871d1052e1a", "node_type": "1", "metadata": {}, "hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "class_name": "RelatedNodeInfo"}}, "hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "text": "Composing Objects\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nhv.extension('bokeh')\n```\n\nInstantly viewable HoloViews objects include elements (discussed already) and containers (collections of elements or other containers). Here we'll introduce two types of containers for collecting viewable objects, each typically created from the existing objects using a convenient operator syntax:\n\n 1. ** ``Layout`` (``+``):** A collection of any HoloViews objects to be displayed side by side. \n 2. **``Overlay`` (``*``):** A collection of HoloViews objects to be displayed overlaid on one another with the same axes.\n\nThe Layout and Overlay containers allow you to mix types in any combination, and have an ordering but no numerical or categorical key dimension with which to index the objects. In contrast, the Dimensioned containers discussed later, such as ``HoloMap`` , ``GridSpace``, ``NdOverlay``, and ``NdLayout``, do not allow mixed types, and each item has an associated numerical or categorical index (key).\n\nBecause you can compose a mix of any HoloViews elements into layouts and overlays, these types of container are very common, which is why they have dedicated composition operators. This user guide describes how you can build and organize your data using these two types of composition.\n\nTo show how layouts and overlays work with heterogeneous types, we will use these two elements throughout this notebook:\n\n\n```python\nxs = [0.1* i for i in range(100)]\ncurve = hv.Curve((xs, [np.sin(x) for x in xs]))\nscatter = hv.Scatter((xs[::5], np.linspace(0,1,20)))\n```", "start_char_idx": 2, "end_char_idx": 1590, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1c9cf590-947f-422b-ae18-d871d1052e1a": {"__data__": {"id_": "1c9cf590-947f-422b-ae18-d871d1052e1a", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c4b26310-14a9-4f28-9bd0-14ed5df9018c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "27035eda13ad99d84c7d668eafe6922b78d0a9f94ddbd933d809d68e71f9c0ec", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a0d0bbe7-2a0a-4354-83cf-4f77f962c83a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "81042881-e066-436b-9d7d-68fb67675dda", "node_type": "1", "metadata": {}, "hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "class_name": "RelatedNodeInfo"}}, "hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "text": "1. ``Layout``\n\nA ``Layout`` can contain any HoloViews object except an ``NdLayout``. (See Building Composite Objects for the full details about the ways containers can be composed.)\n\nYou can build a ``Layout`` from two or more HoloViews objects of any type by using the ``+`` operator:\n\n\n```python\ncurve + scatter\n```\n\nIn this example, we have a ``Layout`` composed of a ``Curve`` element and a ``Scatter`` element, and they happen to share the same ``x`` and ``y`` dimensions.", "start_char_idx": 2, "end_char_idx": 479, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "81042881-e066-436b-9d7d-68fb67675dda": {"__data__": {"id_": "81042881-e066-436b-9d7d-68fb67675dda", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "18df4da0-7e19-45ea-9333-9ca142034120", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "e36768227b6393bd46fdd4f87137e52e93f5b45f695c6a33f5ae5f0b94e66566", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1c9cf590-947f-422b-ae18-d871d1052e1a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bacf1df5-b363-47d3-a08a-aba41b5e7654", "node_type": "1", "metadata": {}, "hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "class_name": "RelatedNodeInfo"}}, "hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "text": "Building a ``Layout`` from a list\n\nIf the ``+`` syntax is not convenient, you can also build a ``Layout`` using its constructor directly, which is useful if you want to create a ``Layout`` of an arbitrary length:\n\n\n```python\ncurve_list = [hv.Curve((xs, [np.sin(f*x) for x in xs])) for f in [0.5, 0.75]]\nscatter_list = [hv.Scatter((xs[::5], f*np.linspace(0,1,20))) for f in [-0.5, 0.5]]\n\nlayout = hv.Layout(curve_list + scatter_list).cols(2)\nlayout\n```\n\nNote the use of the ``.cols`` method to specify the number of columns, wrapping to the next row in scanline order (left to right, then top to bottom).", "start_char_idx": 2, "end_char_idx": 607, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bacf1df5-b363-47d3-a08a-aba41b5e7654": {"__data__": {"id_": "bacf1df5-b363-47d3-a08a-aba41b5e7654", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7ca09af5-c0b0-4544-a74f-8652e3a0afb4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "1abfa510bfb0e51825a0c9d47e421a1194ebb7505e6ac07f09fddf307dbfbd14", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "81042881-e066-436b-9d7d-68fb67675dda", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "08a15300-109c-47cc-96f4-a6526893408d", "node_type": "1", "metadata": {}, "hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "class_name": "RelatedNodeInfo"}}, "hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "text": "A ``Layout`` has two-level attribute access\n\n``Layout`` and ``Overlay`` are tree-based data structures that can hold arbitrarily heterogeneous collections of HoloViews objects, and are quite different from the dictionary-like dimensioned containers (which will be described in later guides).\n\nAs mentioned previously in Annotating Data, HoloViews objects have string ``group`` and ``label`` parameters, which can be used to select objects in the ``Layout`` using two-level attribute access. First let us see how to index the above example, where the ``group`` and ``label`` parameters were left unspecified on creation:\n\n\n```python\nprint(layout)\n```\n\nAs you can see, the ``layout`` object consists of four different elements, each mapping from ``x`` to ``y``. You can use the \"dot\" syntax shown in the repr to select individual elements from the layout:\n\n\n```python\nlayout2 = layout.Curve.I + layout.Scatter.II\nlayout2\n```\n\nHere we create a second layout by indexing two elements from our earlier ``layout`` object and using ``+`` between them. We see that the first level of indexing is the ``group`` string (which defaults to the element class name) followed by the label, which wasn't set and is therefore mapped to an automatically generated Roman numeral (I,II,III,IV, etc.). \n\nAs group and label were again not specified, our new ``Layout`` will also use ``Curve.I`` for the curve, but as there is only one scatter element, it will have ``Scatter.I`` to index the scatter:\n\n\n```python\nlayout2.Scatter.I\n```", "start_char_idx": 2, "end_char_idx": 1515, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "08a15300-109c-47cc-96f4-a6526893408d": {"__data__": {"id_": "08a15300-109c-47cc-96f4-a6526893408d", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d162d0f4-b40a-4ba0-a422-87e0d4249c2b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8c8d2503011b285797e05bdb9a6393f0380ba94d7c39575c884c9ac9478aca63", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bacf1df5-b363-47d3-a08a-aba41b5e7654", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f4d4cd8f-e0a1-43d1-a411-2a0903d35909", "node_type": "1", "metadata": {}, "hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "class_name": "RelatedNodeInfo"}}, "hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "text": "Using ``group`` and ``label`` with ``Layout``\n\nNow let's return to the first simple layout example, this time setting a group and label as introduced in the Annotating Data guide:\n\n\n```python\nxs = [0.1* i for i in range(100)]\n\nlow_freq = hv.Curve((xs, [np.sin(x) for x in xs]), group='Sinusoid', label='Low Frequency')\nlinpoints = hv.Scatter((xs[::5], np.linspace(0,1,20)), group='Linear Points', label='Demo')\n\nlabelled = low_freq + linpoints\nlabelled\n```\n\nAs you can see, the group and label are used for titling the plots. They also determine how the objects are accessed:\n\n\n```python\nlabelled.Linear_Points.Demo + labelled.Sinusoid.Low_Frequency\n```\n\nYou are encouraged to use the group and label names as appropriate for organizing your own data. They should let you easily refer to groups of data that are meaningful to your domain, e.g. for Applying Customizations.", "start_char_idx": 2, "end_char_idx": 885, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f4d4cd8f-e0a1-43d1-a411-2a0903d35909": {"__data__": {"id_": "f4d4cd8f-e0a1-43d1-a411-2a0903d35909", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7e6a8696-a4e6-459b-8c22-3c88de3a4f3d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "a58a078a69262f19fca065dd887618eb3a089e0afffb38f487bff7120398858f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "08a15300-109c-47cc-96f4-a6526893408d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8feb6918-5691-4fda-b973-3c582b06301a", "node_type": "1", "metadata": {}, "hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "class_name": "RelatedNodeInfo"}}, "hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "text": "2. ``Overlay``\n\nAn ``Overlay`` can contain any HoloViews elements, but the only container type it can contain is ``NdOverlay``. Building Composite Objects provides the full details on how containers can be composed.\n\nOther than being composed with ``*`` and displaying elements together in the same space, ``Overlay`` shares many of the same concepts as layout. The rest of this section will show the overlay equivalents of the manipulations shown above for layout. \n\nFirst, composition with ``*`` instead of ``+`` results in a single overlaid plot, rather than side-by-side plots:\n\n\n```python\ncurve * scatter\n```", "start_char_idx": 2, "end_char_idx": 615, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8feb6918-5691-4fda-b973-3c582b06301a": {"__data__": {"id_": "8feb6918-5691-4fda-b973-3c582b06301a", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "31c09404-4e75-48ec-a432-04c10811345b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "1faac8db3e17a831a03977632b5c8c0546f646c1f80aa225697307fd0cf52135", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f4d4cd8f-e0a1-43d1-a411-2a0903d35909", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "946b5ce4-1a23-4c63-a417-dd3284b9cb97", "node_type": "1", "metadata": {}, "hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "class_name": "RelatedNodeInfo"}}, "hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "text": "Building ``Overlay`` from a list\n\nAn ``Overlay`` can be built explicitly from a list, just like a ``Layout``:\n\n\n```python\ncurve_list = [hv.Curve((xs, [np.sin(f*x) for x in xs])) for f in [0.5, 0.75]]\nscatter_list = [hv.Scatter((xs[::5], f*np.linspace(0,1,20))) for f in [-0.5, 0.5]]\noverlay = hv.Overlay(curve_list + scatter_list)\noverlay\n```\n\nAs you can see, a special feature of ``Overlay`` compared to ``Layout`` is that overlays use *color cycles* to help keep the overlaid plots distinguishable, which you can learn about in Applying Customization.", "start_char_idx": 2, "end_char_idx": 557, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "946b5ce4-1a23-4c63-a417-dd3284b9cb97": {"__data__": {"id_": "946b5ce4-1a23-4c63-a417-dd3284b9cb97", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6a36d099-ba6a-45f3-8c65-c1ca56cbe7a5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "7833fe2047cd3319ad74b701cd4ee1f7d86a48fe52f96fc3a689b6ebf873d402", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8feb6918-5691-4fda-b973-3c582b06301a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6867f344-f104-45ad-91df-1f4bf2922ab4", "node_type": "1", "metadata": {}, "hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "class_name": "RelatedNodeInfo"}}, "hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "text": "``Overlay`` also has two-level attribute access\n\nLike ``Layout``, ``Overlay`` is fundamentally a tree structure holding arbitrarily heterogeneous HoloViews objects, unlike the dimensioned containers. ``Overlay`` objects also make use of the ``group`` and ``label`` parameters, introduced in Annotating Data, for two-level attribute access.\n\nOnce again, let us see how to index the above example where the ``group`` and ``label`` parameters were left unspecified:\n\n\n```python\nprint(overlay)\n```\n\n\n```python\noverlay.Curve.I * overlay.Scatter.II\n```\n\nHere we create a second overlay by indexing two elements from our earlier ``overlay`` object and using ``*`` between them. We see that the first level is the ``group`` string (which defaults to the element class name) followed by the label, which wasn't set and is therefore mapped to a Roman numeral.", "start_char_idx": 2, "end_char_idx": 851, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6867f344-f104-45ad-91df-1f4bf2922ab4": {"__data__": {"id_": "6867f344-f104-45ad-91df-1f4bf2922ab4", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a9da5089-13fa-4881-a005-00e37c3398c7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "22fc5e3c7f88292a3474d13e8527712d7912b0f944d8035b08289b3b573337a9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "946b5ce4-1a23-4c63-a417-dd3284b9cb97", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "39ab16a8-7c77-4fdb-ad1b-3ffef505e555", "node_type": "1", "metadata": {}, "hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "class_name": "RelatedNodeInfo"}}, "hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "text": "Using ``group`` and ``label`` with ``Overlay``\n\nNow let's return to the first simple overlay example, this time setting ``group`` and ``label`` as introduced in the Annotating Data guide:\n\n\n```python\nhigh_freq = hv.Curve((xs, [np.sin(2*x) for x in xs]), group='Sinusoid', label='High Frequency')\nlabelled = low_freq * high_freq * linpoints\nlabelled\n```\n\nOnce again, this example follows the corresponding ``Layout`` example, although this time we added a high-frequency curve to demonstrate how ``group`` and ``label`` are now used to generate the legend (as opposed to the title, as it was for ``Layout``).\n\nThe following example shows how ``group`` and ``label`` affect access:\n\n\n```python\nlabelled.Linear_Points.Demo * labelled.Sinusoid.High_Frequency * labelled.Sinusoid.Low_Frequency\n```\n\nThis new re-ordered ``Overlay`` switches the z-ordering as well as the legend color of the two sinusoidal curves. The colors and other plot options can be set for specific groups and labels as described in \nApplying Customizations.", "start_char_idx": 2, "end_char_idx": 1028, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "39ab16a8-7c77-4fdb-ad1b-3ffef505e555": {"__data__": {"id_": "39ab16a8-7c77-4fdb-ad1b-3ffef505e555", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6de6fd75-c2dd-4ddd-a13e-a06d59ef3924", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "aba08453a1ca4a328c34aff575a38403085c858f03f7eb454ae8ca0e68e0d143", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6867f344-f104-45ad-91df-1f4bf2922ab4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a01cb84a-8780-498e-825a-3712c2a41c11", "node_type": "1", "metadata": {}, "hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "class_name": "RelatedNodeInfo"}}, "hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "text": "Layouts of overlays\n\nOf course, layouts work with both elements and overlays:\n\n\n```python\noverlay + labelled + labelled.Sinusoid.Low_Frequency\n```", "start_char_idx": 2, "end_char_idx": 148, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a01cb84a-8780-498e-825a-3712c2a41c11": {"__data__": {"id_": "a01cb84a-8780-498e-825a-3712c2a41c11", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "18858e5b-02c8-46a0-b1ce-80add02da61e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "00a56e3d18a000bce60299fbb90d78a9280ef6bc11fc12aad690e6b9f44dc9bc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "39ab16a8-7c77-4fdb-ad1b-3ffef505e555", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7ddcca1f-4bfd-4723-b22f-705ef7ca8f46", "node_type": "1", "metadata": {}, "hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "class_name": "RelatedNodeInfo"}}, "hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "text": "Tab completion\n\nBoth ``Layout`` and ``Overlay`` are designed to be easy to explore and inspect with tab completion. Try running:\n\n```python\noverlay.[tab]\n```\n\nor\n\n```python\nlayout.[tab]\n```\n\n\nIn a code cell and you should see the first levels of indexing (``Curve`` and ``Scatter``) conveniently listed at the top. If this is not the case, you may need to enable improved tab-completion as described in Configuring HoloViews.\n\nHaving seen how to compose viewable objects, the next section shows how to apply customizations.", "start_char_idx": 2, "end_char_idx": 525, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7ddcca1f-4bfd-4723-b22f-705ef7ca8f46": {"__data__": {"id_": "7ddcca1f-4bfd-4723-b22f-705ef7ca8f46", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "96eb20de-84b1-4467-908a-59e041bc4cdf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "89f3ffbac12dda19427989a9b57cbeb4e1d65c53fd6cef2c806c4f8494e850d8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a01cb84a-8780-498e-825a-3712c2a41c11", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "13069f2a-295c-404f-a102-64bbfb0ff58a", "node_type": "1", "metadata": {}, "hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "class_name": "RelatedNodeInfo"}}, "hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "text": "Applying Customizations\n\n\n```python\nimport pandas as pd\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension('bokeh', 'matplotlib')\n```\n\nAs introduced in the Customization section of the 'Getting Started' guide, HoloViews maintains a strict separation between your content (your data and declarations about your data) and its presentation (the details of how this data is represented visually). This separation is achieved by maintaining sets of keyword values (\"options\") that specify how elements are to appear, stored outside of the element itself. Option keywords can be specified for individual element instances, for all elements of a particular type, or for arbitrary user-defined sets of elements that you give a certain ``group`` and ``label`` (see Annotating Data).\n\nThe options system controls how individual plots appear, but other important settings are made more globally using the \"output\" system, which controls HoloViews plotting and rendering code (see the Plots and Renderers user guide). In this guide we will show how to customize the visual styling with the options and output systems, focusing on the mechanisms rather than the specific choices available (which are covered in other guides such as Style Mapping).", "start_char_idx": 2, "end_char_idx": 1267, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "13069f2a-295c-404f-a102-64bbfb0ff58a": {"__data__": {"id_": "13069f2a-295c-404f-a102-64bbfb0ff58a", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ce2f59a7-3841-4efe-9aee-8007ca48ef7c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "6ba03249d1c3935ef4cce22052ce43533a1bb2f02d77aea4233c079d69d339dd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7ddcca1f-4bfd-4723-b22f-705ef7ca8f46", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4733be20-3bab-4dbd-8994-bc7d351c1c07", "node_type": "1", "metadata": {}, "hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "class_name": "RelatedNodeInfo"}}, "hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "text": "Core concepts\n\nThis section offers an overview of some core concepts for customizing visual representation, focusing on how HoloViews keeps content and presentation separate. To start, we will revisit the simple introductory example in the Customization getting-started guide (which might be helpful to review first).\n\n\n```python\nspike_train = pd.read_csv('../assets/spike_train.csv.gz')\ncurve = hv.Curve(spike_train, 'milliseconds', 'Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', [])\n```\n\nAnd now we display the ``curve`` and a ``spikes`` elements together in a layout as we did in the getting-started guide:\n\n\n```python\ncurve = hv.Curve( spike_train, 'milliseconds', 'Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', [])\nlayout = curve + spikes\n\nlayout.opts(\n opts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover']),\n opts.Spikes(height=150, width=900, yaxis=None, line_width=0.25, color='grey')).cols(1)\n```\n\nThis example illustrates a number of key concepts, as described below.", "start_char_idx": 2, "end_char_idx": 1047, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4733be20-3bab-4dbd-8994-bc7d351c1c07": {"__data__": {"id_": "4733be20-3bab-4dbd-8994-bc7d351c1c07", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "89a535b3-8fd3-4640-aa09-a3478dd48b80", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "08d635c4c9b994f5476e97ecdd807af1f6087c0b91a9999e5732f43a81a7c144", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "13069f2a-295c-404f-a102-64bbfb0ff58a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c06dc94b-3c80-4e93-81f0-dbf209c95c75", "node_type": "1", "metadata": {}, "hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "class_name": "RelatedNodeInfo"}}, "hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "text": "Content versus presentation\n\nIn the getting-started guide Introduction, we saw that we can print the string representation of HoloViews objects such as `layout`:\n\n\n```python\nprint(layout)\n```\n\nIn the Customization getting-started guide, the `.opts.info()` method was introduced that lets you see the options *associated* with (though not stored on) the objects:\n\n\n```python\nlayout.opts.info()\n```\n\nIf you inspect all the state of the `Layout`, `Curve`, or `Spikes` objects you will not find any of these keywords, because they are stored in an entirely separate data structure. HoloViews assigns a unique ID per HoloViews object that lets arbitrarily specific customization be associated with that object if needed, while also making it simple to define options that apply to entire classes of objects by type (or group and label if defined). The HoloViews element is thus *always* a thin wrapper around your data, without any visual styling information or plotting state, even though it *seems* like the object includes the styling information. This separation between content and presentation is by design, so that you can work with your data and with its presentation entirely independently.\n\nIf you wish to clear the options that have been associated with an object `obj`, you can call `obj.opts.clear()`.", "start_char_idx": 2, "end_char_idx": 1312, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c06dc94b-3c80-4e93-81f0-dbf209c95c75": {"__data__": {"id_": "c06dc94b-3c80-4e93-81f0-dbf209c95c75", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "33403c52-9b09-449b-815d-c130f4dac152", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "80bba941caba3ab64a2aa4e552ab3757236b2e37967225353de64f52d28f4051", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4733be20-3bab-4dbd-8994-bc7d351c1c07", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "81114efe-ef34-48cc-95e2-2541ad847eca", "node_type": "1", "metadata": {}, "hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "class_name": "RelatedNodeInfo"}}, "hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "text": "Option builders\n\nThe Customization getting-started guide also introduces the notion of *option builders*. One of the option builders in the visualization shown above is:\n\n\n```python\nopts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover'])\n```\n\nAn *option builder* takes a collection of keywords and returns an `Options` object that stores these keywords together. Why should you use option builders and how are they different from a vanilla dictionary?\n\n1. The option builder specifies which type of HoloViews object the options are for, which is important because each type accepts different options.\n2. Knowing the type, the options builder does *validation* against that type for the currently loaded plotting extensions. Try introducing a typo into one of the keywords above; you should get a helpful error message. Separately, try renaming `line_width` to `linewidth`, and you'll get a different message because the latter is a valid matplotlib keyword.\n3. The option builder allows *tab-completion* in the notebook. This is useful for discovering available keywords for that type of object, which helps prevent mistakes and makes it quicker to specify a set of keywords.\n\nIn the cell above, the specified options are applicable to `Curve` elements, and different validation and tab completion will be available for other types. \n\nThe returned `Options` object is different from a dictionary in the following ways:\n\n1. An optional *spec* is recorded, where this specification is normally just the element name. Above this is simply 'Curve'. Later, in section Using `group` and `label`, we will see how this can also specify the `group` and `label`.\n2. The keywords are alphanumerically sorted, making it easier to compare `Options` objects.", "start_char_idx": 2, "end_char_idx": 1784, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "81114efe-ef34-48cc-95e2-2541ad847eca": {"__data__": {"id_": "81114efe-ef34-48cc-95e2-2541ad847eca", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7330d96d-c6fa-43ab-8fa3-6e4e14915b8c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "fe406bc7e7d87a50c3d3d98c031f95ffcad10a76deaa5748809668ac38ac24a9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c06dc94b-3c80-4e93-81f0-dbf209c95c75", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2c48ea8f-4294-4e93-9458-c53c3c5fff09", "node_type": "1", "metadata": {}, "hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "class_name": "RelatedNodeInfo"}}, "hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "text": "Inlining options\n\nWhen customizing a single element, the use of an option builder is not mandatory. If you have a small number of keywords that are common (e.g `color`, `cmap`, `title`, `width`, `height`) it can be clearer to inline them into the `.opts` method call if tab-completion and validation isn't required:\n\n\n```python\nnp.random.seed(42)\narray = np.random.random((10,10))\nim1 = hv.Image(array).opts(opts.Image(cmap='Reds')) # Using an option builder\nim2 = hv.Image(array).opts(cmap='Blues') # Without an option builder\nim1 + im2\n```\n\nYou cannot inline keywords for composite objects such as `Layout` or `Overlay` objects. For instance, the `layout` object is:\n\n\n```python\nprint(layout)\n```\n\nTo customize this layout, you need to use an option builder to associate your keywords with either the `Curve` or the `Spikes` object, or else you would have had to apply the options to the individual elements before you built the composite object. To illustrate setting by type, note that in the first example, both the `Curve` and the `Spikes` have different `height` values provided.\n\nYou can also target options by the `group` and `label` as described in section on using `group` and `label`.", "start_char_idx": 2, "end_char_idx": 1209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2c48ea8f-4294-4e93-9458-c53c3c5fff09": {"__data__": {"id_": "2c48ea8f-4294-4e93-9458-c53c3c5fff09", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e0104155-829c-419d-9c39-5d1d6d6a084f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "218f8fcc00b1b8d94a154901c90a4b380fe7e1a8fc5ace3ff1c1dbeeea6e7b69", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "81114efe-ef34-48cc-95e2-2541ad847eca", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6efea588-72a2-4a09-aa07-77f47d0d1335", "node_type": "1", "metadata": {}, "hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "class_name": "RelatedNodeInfo"}}, "hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "text": "Session-specific options\n\nOne other common need is to set some options for a Python session, whether using Jupyter notebook or not. For this you can set the default options that will apply to all objects created subsequently:\n\n\n```python\nopts.defaults(\n opts.HeatMap(cmap='Summer', colorbar=True, toolbar='above'))\n```\n\nThe `opts.defaults` method has now set the style used for all `HeatMap` elements used in this session:\n\n\n```python\ndata = [(chr(65+i), chr(97+j), i*j) for i in range(5) for j in range(5) if i!=j]\nheatmap = hv.HeatMap(data).sort()\nheatmap\n```", "start_char_idx": 2, "end_char_idx": 567, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6efea588-72a2-4a09-aa07-77f47d0d1335": {"__data__": {"id_": "6efea588-72a2-4a09-aa07-77f47d0d1335", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c038d2e0-f2a8-49f2-8609-7316e87ac383", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "c27fd9a95e4f72ba234bf95b723d3ced16d1ea09569eddb9794f0960679ef44b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2c48ea8f-4294-4e93-9458-c53c3c5fff09", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f4acd5c1-a743-4e10-8f56-76eec58cc734", "node_type": "1", "metadata": {}, "hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "class_name": "RelatedNodeInfo"}}, "hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "text": "Discovering options\n\nUsing tab completion in the option builders is one convenient and easy way of discovering the available options for an element. Another approach is to use `hv.help`.\n\nFor instance, if you run `hv.help(hv.Curve)` you will see a list of the 'style' and 'plot' options applicable to `Curve`. The distinction between these two types of options can often be ignored for most purposes, but the interested reader is encouraged to read more about them in more detail below.\n\nFor the purposes of discovering the available options, the keywords listed under the 'Style Options' section of the help output is worth noting. These keywords are specific to the active plotting extension and are part of the API for that plotting library. For instance, running `hv.help(hv.Curve)` in the cell below would give you the keywords in the Bokeh documentation that you can reference for customizing the appearance of `Curve` objects.", "start_char_idx": 2, "end_char_idx": 935, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f4acd5c1-a743-4e10-8f56-76eec58cc734": {"__data__": {"id_": "f4acd5c1-a743-4e10-8f56-76eec58cc734", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e07a805f-a626-4871-8d38-2ff34156fb8e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8d6b6b7dc6faaba41d94e68d5affbc691236861b4d5b0aebeacb8d56f2b8be5b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6efea588-72a2-4a09-aa07-77f47d0d1335", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "313a382c-12d3-4ef1-bacb-cfc39731aba6", "node_type": "1", "metadata": {}, "hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "class_name": "RelatedNodeInfo"}}, "hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "text": "Maximizing readability\n\nThere are many ways to specify options in your code using the above tools, but for creating readable, maintainable code, we recommend making the separation of content and presentation explicit. Someone reading your code can then understand your visualizations in two steps 1) what your data *is* in terms of the applicable elements and containers 2) how this data is to be presented visually.\n\nThe following guide details the approach we have used through out the examples and guides on holoviews.org. We have found that following these rules makes code involving holoviews easier to read and more consistent.\n\nThe core principle is as follows: ***avoid mixing declarations of data, elements and containers with details of their visual appearance***.", "start_char_idx": 2, "end_char_idx": 776, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "313a382c-12d3-4ef1-bacb-cfc39731aba6": {"__data__": {"id_": "313a382c-12d3-4ef1-bacb-cfc39731aba6", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "75107a9d-2ab6-4a58-bfd3-3f007a8c6c35", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "3289f55a7a047fce4f665423aed57a652ad8d5e05b2d350db432f822a21c7e3d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f4acd5c1-a743-4e10-8f56-76eec58cc734", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "896dfa6b-13ad-4098-a82b-a2953fcb4e4b", "node_type": "1", "metadata": {}, "hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "class_name": "RelatedNodeInfo"}}, "hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "text": "Two contrasting examples\n\nOne of the best ways to do this is to declare all your elements, compose them and then apply all the necessary styling with the `.opts` method before the visualization is rendered to disk or to the screen. For instance, the example from the getting-started guide could have been written sub-optimally as follows:\n\n***Sub-optimal***\n```python\ncurve = hv.Curve( spike_train, 'milliseconds', 'Hertz').opts(\n height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover'])\nspikes = hv.Spikes(spike_train, 'milliseconds', vdims=[]).opts(\nheight=150, width=900, yaxis=None, line_width=0.25, color='grey')\n(curve + spikes).cols(1)\n```\n\nCode like that is very difficult to read because it mixes declarations of the data and its dimensions with details about how to present it. The recommended version declares the `Layout`, then separately applies all the options together where it's clear that they are just hints for the visualization:\n\n***Recommended***\n```python\ncurve = hv.Curve( spike_train, 'milliseconds', 'Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', [])\nlayout = curve + spikes\n\nlayout.opts(\n opts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover']),\n opts.Spikes(height=150, width=900, yaxis=None, line_width=0.25, color='grey')).cols(1)\n```\n\n\nBy grouping the options in this way and applying them at the end, you can see the definition of `layout` without being distracted by visual concerns declared later. Conversely, you can modify the visual appearance of `layout` easily without needing to know exactly how it was defined. The coding style guide section below offers additional advice for keeping things readable and consistent.", "start_char_idx": 2, "end_char_idx": 1742, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "896dfa6b-13ad-4098-a82b-a2953fcb4e4b": {"__data__": {"id_": "896dfa6b-13ad-4098-a82b-a2953fcb4e4b", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3cead9ea-c177-43b3-949f-17474df6b846", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "0b008af47364bb4f0b1087b783470743681814767bdbdc7478539277c9459dad", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "313a382c-12d3-4ef1-bacb-cfc39731aba6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5f213884-0e27-47dd-930a-b0055d30f6d0", "node_type": "1", "metadata": {}, "hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "class_name": "RelatedNodeInfo"}}, "hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "text": "When to use multiple`.opts` calls\n\nThe above coding style applies in many case, but sometimes you have multiple elements of the same type that you need to distinguish visually. For instance, you may have a set of curves where using the `dim` or `Cycle` objects (described in the Style Mapping user guide) is not appropriate and you want to customize the appearance of each curve individually. Alternatively, you may be generating elements in a list comprehension for use in `NdOverlay` and have a specific style to apply to each one.\n\nIn these situations, it is often appropriate to use the inline style of `.opts` locally. In these instances, it is often best to give the individually styled objects a suitable named handle as illustrated by the legend example of the gallery.", "start_char_idx": 2, "end_char_idx": 780, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5f213884-0e27-47dd-930a-b0055d30f6d0": {"__data__": {"id_": "5f213884-0e27-47dd-930a-b0055d30f6d0", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a8c4d253-a257-411c-a861-a7ebbaa9deff", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "b7084a54c9608feebec1a9f0d03cb2b90af62e47ce7a266082c79af717946026", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "896dfa6b-13ad-4098-a82b-a2953fcb4e4b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e3ea3af3-18ce-4bb9-a2ee-0c81a2c106e2", "node_type": "1", "metadata": {}, "hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "class_name": "RelatedNodeInfo"}}, "hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "text": "General advice\n\nAs HoloViews is highly compositional by design, you can always build long expressions mixing the data and element declarations, the composition of these elements, and their customization. Even though such expressions can be terse they can also be difficult to read.\n\nThe simplest way to avoid long expressions is to keep some level of separation between these stages:\n\n1. declaration of the data\n2. declaration of the elements, including `.opts` to distinguish between elements of the same type if necessary \n3. composition with `+` and `*` into layouts and overlays, and \n4. customization of the composite object, either with a final call to the `.opts` method, or by declaring such settings as the default for your entire session as described above.\n\nWhen stages are simple enough, it can be appropriate to combine them. For instance, if the declaration of the data is simple enough, you can fold in the declaration of the element. In general, any expression involving three or more of these stages will benefit from being broken up into several steps.\n\nThese general principles will help you write more readable code. Maximizing readability will always require some level of judgement, but you can maximize consistency by consulting the coding style guide section for more tips.", "start_char_idx": 2, "end_char_idx": 1299, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e3ea3af3-18ce-4bb9-a2ee-0c81a2c106e2": {"__data__": {"id_": "e3ea3af3-18ce-4bb9-a2ee-0c81a2c106e2", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8767175a-ed97-4f86-8298-586916ebf3bc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d0e666a8ea75f032fcea32aa9e8a971a5b6502f7fc3da2b719c781462db11137", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5f213884-0e27-47dd-930a-b0055d30f6d0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "026e53ee-7c11-46b4-8795-7a9c16829169", "node_type": "1", "metadata": {}, "hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "class_name": "RelatedNodeInfo"}}, "hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "text": "Customizing display output\n\n\nThe options system controls most of the customizations you might want to do, but there are a few settings that are controlled at a more general level that cuts across all HoloViews object types: the active plotting extension (e.g. Bokeh or Matplotlib), the output display format (PNG, SVG, etc.), the output figure size, and other similar options. The `hv.output` utility allows you to modify these more global settings, either for all subsequent objects or for one particular object:\n\n* `hv.output(**kwargs)`: Customize how the output appears for the rest of the notebook session.\n* `hv.output(obj, **kwargs)`: Temporarily affect the display of an object `obj` using the keyword `**kwargs`.\n\nThe `hv.output` utility only has an effect in contexts where HoloViews objects can be automatically displayed, which currently is limited to the Jupyter Notebook (in either its classic or JupyterLab variants). In any other Python context, using `hv.output` has no effect, as there is no automatically displayed output; see the hv.save() and hv.render() utilities for explicitly creating output in those other contexts.\n\nTo start with `hv.output`, let us define a `Path` object:\n\n\n```python\nlin = np.linspace(0, np.pi*2, 200)\n\ndef lissajous(t, a, b, delta):\n return (np.sin(a * t + delta), np.sin(b * t), t)\n\npath = hv.Path([lissajous(lin, 3, 5, np.pi/2)])\npath.opts(opts.Path(color='purple', line_width=3, line_dash='dotted'))\n```\n\nNow, to illustrate, let's use `hv.output` to switch our plotting extension to matplotlib:\n\n\n```python\nhv.output(backend='matplotlib', fig='svg')\n```\n\nWe can now display our `path` object with some option customization:\n\n\n```python\npath.opts(opts.Path(linewidth=2, color='red', linestyle='dotted'))\n```\n\nOur plot is now rendered with Matplotlib, in SVG format (try right-clicking the image in the web browser and saving it to disk to confirm). Note that the `opts.Path` option builder now tab completes *Matplotlib* keywords because we activated the Matplotlib plotting extension beforehand. Specifically, `linewidth` and `linestyle` don't exist in Bokeh, where the corresponding options are called `line_width` and `line_dash` instead.\n\nYou can see the custom output options that are currently active using `hv.output.info()`:\n\n\n```python\nhv.output.info()\n```\n\nThe info method will always show which backend is active as well as any other custom settings you have specified. These settings apply to the subsequent display of all objects unless you customize the output display settings for a single object.\n\n\nTo illustrate how settings are kept separate, let us switch back to Bokeh in this notebook session:\n\n\n```python\nhv.output(backend='bokeh')\nhv.output.info()\n```\n\nWith Bokeh active, we can now declare options on `path` that we want to apply only to matplotlib:\n\n\n```python\npath = path.opts(\n opts.Path(linewidth=3, color='blue', backend='matplotlib'))\npath\n```\n\nNow we can supply `path` to `hv.output` to customize how it is displayed, while activating matplotlib to generate that display. In the next cell, we render our path at 50% size as an SVG using matplotlib.\n\n\n```python\nhv.output(path, backend='matplotlib', fig='svg', size=50)\n```\n\nPassing `hv.output` an object will apply the specified settings only for the subsequent display. If you were to view `path` now in the usual way, you would see that it is still being displayed with Bokeh with purple dotted lines.\n\nOne thing to note is that when we set the options with `backend='matplotlib'`, the active plotting extension was Bokeh. This means that `opts.Path` will tab complete *bokeh* keywords, and not the matplotlib ones that were specified. In practice you will want to set the backend appropriately before building your options settings, to ensure that you get the most appropriate tab completion.", "start_char_idx": 2, "end_char_idx": 3832, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "026e53ee-7c11-46b4-8795-7a9c16829169": {"__data__": {"id_": "026e53ee-7c11-46b4-8795-7a9c16829169", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ad484503-aafe-4c7d-8f5b-fc1db95ba96b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "3f2990f039075a84fc54e971cd582fb41e1e9ab4a4e451704cde8cac4fa83884", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e3ea3af3-18ce-4bb9-a2ee-0c81a2c106e2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4fa1e274-8a7e-4da7-a261-12073723c286", "node_type": "1", "metadata": {}, "hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "class_name": "RelatedNodeInfo"}}, "hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "text": "Available `hv.output` settings\n\nYou can see the available settings using `help(hv.output)`. For reference, here are the most commonly used ones:\n\n* **backend**: *The backend used by HoloViews*. If the necessary libraries are installed this can be `'bokeh'`, `'matplotlib'` or `'plotly'`.\n* **fig** : *The static figure format*. The most common options are `'svg'` and `'png'`.\n* **holomap**: *The display type for holomaps*. With matplotlib and the necessary support libraries, this may be `'gif'` or `'mp4'`. The JavaScript `'scrubber'` widgets as well as the regular `'widgets'` are always supported.\n* **fps**: *The frames per second used for animations*. This setting is used for GIF output and by the scrubber widget.\n* **size**: *The percentage size of displayed output*. Useful for making all display larger or smaller.\n* **dpi**: *The rendered dpi of the figure*. This setting affects raster output such as PNG images.\n\nIn `help(hv.output)` you will see a few other, less common settings. The `filename` setting particular is not recommended and will be deprecated in favor of `hv.save` in future.", "start_char_idx": 2, "end_char_idx": 1107, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4fa1e274-8a7e-4da7-a261-12073723c286": {"__data__": {"id_": "4fa1e274-8a7e-4da7-a261-12073723c286", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "87e3ac7c-50fd-419f-9b05-9998bf4dc06d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "20ed7efcfb4c0cba79dd8d1687a3a34b48ea8e5b142caec0bad3eadedf5e6e4e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "026e53ee-7c11-46b4-8795-7a9c16829169", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "16fa0dfe-1f7c-4d2f-a848-3f5b9a158885", "node_type": "1", "metadata": {}, "hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "class_name": "RelatedNodeInfo"}}, "hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "text": "Coding style guide\n\nUsing `hv.output` plus option builders with the `.opts` method and `opts.default` covers the functionality required for most HoloViews code written by users. In addition to these recommended tools, HoloViews supports Notebook Magics (not recommended because they are Jupyter-specific) and literal (nested dictionary) formats useful for developers, as detailed in the Extending HoloViews section. \n\nThis section offers further recommendations for how users can structure their code. These are generally tips based on the important principles described in the maximizing readability section that are often helpful but optional.\n\n* Use as few `.opts` calls as necessary to style the object the way you want.\n* You can inline keywords without an option builder if you only have a few common keywords. For instance, `hv.Image(...).opts(cmap='Reds')` is clearer to read than `hv.Image(...).opts(opts.Image(cmap='Reds'))`.\n* Conversely, you *should* use an option builder if you have more than four keywords.\n* When you have multiple option builders, it is often clearest to list them on separate lines with a single indentation in both `.opts` and `opts.defaults`:\n \n**Not recommended**\n\n```\nlayout.opts(opts.VLine(color='white'), opts.Image(cmap='Reds'), opts.Layout(width=500), opts.Curve(color='blue'))\n```\n\n**Recommended**\n\n```\nlayout.opts(\n opts.Curve(color='blue'),\n opts.Image(cmap='Reds'),\n opts.Layout(width=500),\n opts.VLine(color='white'))\n``` \n \n* The latter is recommended for another reason: if possible, list your element option builders in alphabetical order, before your container option builders in alphabetical order.\n\n* Keep the expression before the `.opts` method simple so that the overall expression is readable.\n* Don't mix `hv.output` and use of the `.opts` method in the same expression.", "start_char_idx": 2, "end_char_idx": 1849, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "16fa0dfe-1f7c-4d2f-a848-3f5b9a158885": {"__data__": {"id_": "16fa0dfe-1f7c-4d2f-a848-3f5b9a158885", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bfa4f175-b3e0-465e-8a66-280cfecb3c77", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "0043a03aaf2875bf36afe0d79a314239f2a2019ba16bd8cae1a4d5c0ace772ed", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4fa1e274-8a7e-4da7-a261-12073723c286", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "34b99b21-2096-458e-8b7d-3f273709fdd9", "node_type": "1", "metadata": {}, "hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "class_name": "RelatedNodeInfo"}}, "hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "text": "What is `.options`?\n\n\nIf you tab complete a HoloViews object, you'll notice there is an `.options` method as well as a `.opts` method. So what is the difference?\n\nThe `.options` method was introduced in HoloViews 1.10 and was the first time HoloViews allowed users to ignore the distinction between 'style', 'plot' and 'norm' options described in the next section. It is largely equivalent to the `.opts` method except that it applies the options on a returned clone of the object.\n\nIn other words, you have `clone = obj.options(**kwargs)` where `obj` is unaffected by the keywords supplied while `clone` will be customized. Both `.opts` and `.options` support an explicit `clone` keyword, so:\n\n* `obj.opts(**kwargs, clone=True)` is equivalent to `obj.options(**kwargs)`, and conversely\n* `obj.options(**kwargs, clone=False)` is equivalent to `obj.opts(**kwargs)`\n\nFor this reason, users only ever need to use `.opts` and occasionally supply `clone=True` if required. The only other difference between these methods is that `.opts` supports the full literal specification that allows splitting into style, plot and norm options (for developers) whereas `.options` does not.", "start_char_idx": 2, "end_char_idx": 1176, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "34b99b21-2096-458e-8b7d-3f273709fdd9": {"__data__": {"id_": "34b99b21-2096-458e-8b7d-3f273709fdd9", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "94be5b1a-40f1-4c65-a6cc-703cce79d8af", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "edd8865d752f5f7b67ccb81f61de03add56404013346518bb3959bad83161e1f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "16fa0dfe-1f7c-4d2f-a848-3f5b9a158885", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5aa32771-5a65-442c-bbc8-4845e8b0ab7b", "node_type": "1", "metadata": {}, "hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "class_name": "RelatedNodeInfo"}}, "hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "text": "When should I use `clone=True`?\n\nThe 'Persistent styles' section of the customization user guide shows how HoloViews remembers options set for an object (per plotting extension). For instance, we never customized the `spikes` object defined at the start of the notebook but we did customize it when it was part of a `Layout` called `layout`. Examining this `spikes` object, we see the options were applied to the underlying object, not just a copy of it in the layout:\n\n\n\n```python\nspikes\n```\n\nThis is because `clone=False` by default in the `.opts` method. To illustrate `clone=True`, let's view some purple spikes *without* affecting the original `spikes` object:\n\n\n```python\npurple_spikes = spikes.opts(color='purple', clone=True)\npurple_spikes\n```\n\nNow if you were to look at `spikes` again, you would see it is still looks like the grey version above and only `purple_spikes` is purple. This means that `clone=True` is useful when you want to keep different styles for some HoloViews object (by making styled clones of it) instead of overwriting the options each time you call `.opts`.", "start_char_idx": 2, "end_char_idx": 1092, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5aa32771-5a65-442c-bbc8-4845e8b0ab7b": {"__data__": {"id_": "5aa32771-5a65-442c-bbc8-4845e8b0ab7b", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b6368f5c-6ef3-445e-8438-1d79dd935241", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "77d61ece6d7bb5d4514899ec2b1b1a101bb724208b4156d15918f2493c7ac088", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "34b99b21-2096-458e-8b7d-3f273709fdd9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "62a9c3dd-3119-41dd-a8fa-a3f81d09ccee", "node_type": "1", "metadata": {}, "hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "class_name": "RelatedNodeInfo"}}, "hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "text": "Extending HoloViews\n\nIn addition to the formats described above for use by users, additional option formats are supported that are less user friendly for data exploration but may be more convenient for library authors building on HoloViews.\n\nThe first of these is the *`Option` list syntax* which is typically most useful outside of notebooks, a *literal syntax* that avoids the need to import `opts`, and then finally a literal syntax that keeps *style* and *plot* options separate.", "start_char_idx": 2, "end_char_idx": 485, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "62a9c3dd-3119-41dd-a8fa-a3f81d09ccee": {"__data__": {"id_": "62a9c3dd-3119-41dd-a8fa-a3f81d09ccee", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "08fd0d36-5043-4e09-b2ed-f5412bc963b0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "73209c450985c1c08e55dc91c5fc3fbc637de8f24e32656d78a41c906be0c3db", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5aa32771-5a65-442c-bbc8-4845e8b0ab7b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8e88f950-7b7d-42cb-9939-a90482f709dc", "node_type": "1", "metadata": {}, "hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "class_name": "RelatedNodeInfo"}}, "hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "text": "`Option` list syntax\n\nIf you find yourself using `obj.opts(*options)` where `options` is a list of `Option` objects, use `obj.opts(options)` instead as list input is also supported:\n\n\n```python\noptions = [\n opts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='grey', tools=['hover']),\n opts.Spikes(height=150, width=900, yaxis=None, line_width=0.25, color='orange')]\n \nlayout.opts(options).cols(1)\n```\n\nThis approach is often best in regular Python code where you are dynamically building up a list of options to apply. Using the option builders early also allows for early validation before use in the `.opts` method.", "start_char_idx": 2, "end_char_idx": 647, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8e88f950-7b7d-42cb-9939-a90482f709dc": {"__data__": {"id_": "8e88f950-7b7d-42cb-9939-a90482f709dc", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3fa5eda3-1cf2-4058-90a3-4afae2a72f2a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "b4ecf579682378ab0cdd5fdf619425cf1e82572e42241bbbb58208370743183a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "62a9c3dd-3119-41dd-a8fa-a3f81d09ccee", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a13681e6-9734-478b-9208-affd351be458", "node_type": "1", "metadata": {}, "hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "class_name": "RelatedNodeInfo"}}, "hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "text": "Literal syntax\n\nThis syntax has the advantage of being a pure Python literal but it is harder to work with directly (due to nested dictionaries), is less readable, lacks tab completion support and lacks validation at the point where the keywords are defined:\n\n\n\n```python\nlayout.opts(\n {'Curve': dict(height=200, width=900, xaxis=None, line_width=2, color='blue', tools=['hover']),\n 'Spikes': dict(height=150, width=900, yaxis=None, line_width=0.25, color='green')}).cols(1)\n```\n\nThe utility of this format is you don't need to import `opts` and it is easier to dynamically add or remove keywords using Python or if you are storing options in a text file like YAML or JSON and only later applying them in Python code. This format should be avoided when trying to maximize readability or make the available keyword options easy to explore.", "start_char_idx": 2, "end_char_idx": 848, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a13681e6-9734-478b-9208-affd351be458": {"__data__": {"id_": "a13681e6-9734-478b-9208-affd351be458", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2b0921c5-a4fd-48e9-b5d6-b2c51ee1e38c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "20b8941b791bcda4d6e3c04ff8332fcf267f9796fc10e23af6d9ed4adb937383", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8e88f950-7b7d-42cb-9939-a90482f709dc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "48b5df67-6450-49a7-9af5-4dd2b56ae440", "node_type": "1", "metadata": {}, "hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "class_name": "RelatedNodeInfo"}}, "hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "text": "Using `group` and `label`\n\nThe notion of an element `group` and `label` was introduced in Annotating Data. This type of metadata is helpful for organizing large collections of elements with shared styling, such as automatically generated objects from some external software (e.g. a simulator). If you have a large set of elements with semantically meaningful `group` and `label` parameters set, you can use this information to appropriately customize large numbers of visualizations at once.\n\nTo illustrate, here are four overlaid curves where three have the `group` of 'Sinusoid' and one of these also has the label 'Squared':\n\n\n```python\nxs = np.linspace(-np.pi,np.pi,100)\ncurve = hv.Curve((xs, xs/3))\ngroup_curve1 = hv.Curve((xs, np.sin(xs)), group='Sinusoid')\ngroup_curve2 = hv.Curve((xs, np.sin(xs+np.pi/4)), group='Sinusoid')\nlabel_curve = hv.Curve((xs, np.sin(xs)**2), group='Sinusoid', label='Squared')\ncurves = curve * group_curve1 * group_curve2 * label_curve\ncurves\n```\n\nWe can now use the `.opts` method to make all curves blue unless they are in the 'Sinusoid' group in which case they are red. Additionally, if a curve in the 'Sinusoid' group also has the label 'Squared', we can make sure that curve is green with a custom interpolation option:\n\n\n```python\ncurves.opts(\n opts.Curve(color='blue'),\n opts.Curve('Sinusoid', color='red'),\n opts.Curve('Sinusoid.Squared', interpolation='steps-mid', color='green'))\n```\n\nBy using `opts.defaults` instead of the `.opts` method, we can use this type of customization to apply options to many elements, including elements that haven't even been created yet. For instance, if we run:\n\n\n```python\nopts.defaults(opts.Area('Error', alpha=0.5, color='grey'))\n```\n\nThen any `Area` element with a `group` of 'Error' will then be displayed as a semi-transparent grey:\n\n\n```python\nX = np.linspace(0,2,10)\nhv.Area((X, np.random.rand(10), -np.random.rand(10)), vdims=['y', 'y2'], group='Error')\n```", "start_char_idx": 2, "end_char_idx": 1955, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "48b5df67-6450-49a7-9af5-4dd2b56ae440": {"__data__": {"id_": "48b5df67-6450-49a7-9af5-4dd2b56ae440", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0b265505-a030-47dd-bb53-7708f99cdd79", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "e07a298854b7a86fbde5f0ef30e9d8bb15748255c4b39270d37a35f639ea7392", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a13681e6-9734-478b-9208-affd351be458", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7a98b790-175d-4801-979a-fcbda06e457f", "node_type": "1", "metadata": {}, "hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "class_name": "RelatedNodeInfo"}}, "hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "text": "Split into `style`, `plot` and `norm` options\n\nIn `HoloViews`, an element such as `Curve` actually has three semantic distinct categories of options: `style`, `plot`, and `norm` options. Normally, a user doesn't need to worry about the distinction if they spend most of their time working with a single plotting extension.\n\nWhen trying to build a system that consistently needs to generate visualizations across different plotting libraries, it can be useful to make this distinction explicit:", "start_char_idx": 2, "end_char_idx": 495, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7a98b790-175d-4801-979a-fcbda06e457f": {"__data__": {"id_": "7a98b790-175d-4801-979a-fcbda06e457f", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f13e8942-1cdb-42a4-a667-5bee5ee17dda", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "6bca7681432fc9f0428c405b49a8f432c4ca0d82376c31a4560307309f49b33d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "48b5df67-6450-49a7-9af5-4dd2b56ae440", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "eaadbd44-8ef6-4664-bef9-1601a50308da", "node_type": "1", "metadata": {}, "hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "class_name": "RelatedNodeInfo"}}, "hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "text": "``style`` options:\n\n``style`` options are passed directly to the underlying rendering backend that actually draws the plots, allowing you to control the details of how it behaves. Each backend has its own options (e.g. the ``bokeh`` or plotly backends).\n\nFor whichever backend has been selected, HoloViews can tell you which options are supported, but you will need to read the corresponding documentation (e.g. matplotlib, bokeh) for the details of their use. For listing available options, see the ``hv.help`` as described in the Discovering options section.\n\nHoloViews has been designed to be easily extensible to additional backends in the future and each backend would have its own set of style options.", "start_char_idx": 2, "end_char_idx": 711, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "eaadbd44-8ef6-4664-bef9-1601a50308da": {"__data__": {"id_": "eaadbd44-8ef6-4664-bef9-1601a50308da", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "093d230a-2ae9-4416-aa95-088a256a0432", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "3860285a991d7f06214dd91cf364bdb609491acd27e65c8eabe0e4e76b92bf25", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7a98b790-175d-4801-979a-fcbda06e457f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "03a3c696-449c-4791-ad09-19101e483f51", "node_type": "1", "metadata": {}, "hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "class_name": "RelatedNodeInfo"}}, "hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "text": "``plot`` options:\n\nEach of the various HoloViews plotting classes declares various Parameters that control how HoloViews builds the visualization for that type of object, such as plot sizes and labels. HoloViews uses these options internally; they are not simply passed to the underlying backend. HoloViews documents these options fully in its online help and in the Reference Manual. These options may vary for different backends in some cases, depending on the support available both in that library and in the HoloViews interface to it, but we try to keep any options that are meaningful for a variety of backends the same for all of them. For listing available options, see the output of ``hv.help``.", "start_char_idx": 2, "end_char_idx": 709, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "03a3c696-449c-4791-ad09-19101e483f51": {"__data__": {"id_": "03a3c696-449c-4791-ad09-19101e483f51", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ad2f0614-b88a-4e84-aa20-e1b234063207", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5dc1ab39c35f90fd5679b9e03e256f406e41783ad7ad3f90be3f23ac1e927a87", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "eaadbd44-8ef6-4664-bef9-1601a50308da", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f9191bf0-28c4-400f-8b89-4d8e7d01db6b", "node_type": "1", "metadata": {}, "hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "class_name": "RelatedNodeInfo"}}, "hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "text": "``norm`` options:\n\n``norm`` options are a special type of plot option that are applied orthogonally to the above two types, to control normalization. Normalization refers to adjusting the properties of one plot relative to those of another. For instance, two images normalized together would appear with relative brightness levels, with the brightest image using the full range black to white, while the other image is scaled proportionally. Two images normalized independently would both cover the full range from black to white. Similarly, two axis ranges normalized together are effectively linked and will expand to fit the largest range of either axis, while those normalized separately would cover different ranges. For listing available options, see the output of ``hv.help``.\n\nYou can preserve the semantic distinction between these types of option in an augmented form of the Literal syntax as follows:\n\n\n```python\nfull_literal_spec = {\n 'Curve': {'style':dict(color='orange')}, \n 'Curve.Sinusoid': {'style':dict(color='grey')}, \n 'Curve.Sinusoid.Squared': {'style':dict(color='black'),\n 'plot':dict(interpolation='steps-mid')}}\nhv.opts.apply_groups(curves, full_literal_spec)\n```\n\nThis specification is what HoloViews uses internally, but it is awkward for people to use and is not ever recommended for normal users. That said, it does offer the maximal amount of flexibility and power for integration with other software.\n\nFor instance, a simulator that can output visualization using either Bokeh or Matplotlib via HoloViews could use this format. By keeping the 'plot' and 'style' options separate, the 'plot' options could be set regardless of the plotting library while the 'style' options would be conditional on the backend.", "start_char_idx": 2, "end_char_idx": 1787, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f9191bf0-28c4-400f-8b89-4d8e7d01db6b": {"__data__": {"id_": "f9191bf0-28c4-400f-8b89-4d8e7d01db6b", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "919e3576-6ad7-4fca-8de8-f08706787d07", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "faba2fbbb395756e451b7ff3e8d6ba37c4d1b5f8aca9eb6bd394606246887b97", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "03a3c696-449c-4791-ad09-19101e483f51", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0ebe32f7-b5fb-4eb7-bc21-ee54a8a2b2a7", "node_type": "1", "metadata": {}, "hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "class_name": "RelatedNodeInfo"}}, "hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "text": "Onwards\n\nThis section of the user guide has described how you can discover and set customization options in HoloViews. Using `hv.help` and the option builders, you should be able to find the options available for any given object you want to display.\n\nWhat *hasn't* been explored are some of the facilities HoloViews offers to map the dimensions of your data to style options. This important topic is explored in the next user guide Style Mapping, where you will learn of the `dim` object as well as about the `Cycle` and `Palette` objects.", "start_char_idx": 2, "end_char_idx": 542, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0ebe32f7-b5fb-4eb7-bc21-ee54a8a2b2a7": {"__data__": {"id_": "0ebe32f7-b5fb-4eb7-bc21-ee54a8a2b2a7", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6eb13c66-467e-458b-a45c-9ff5d1cb2bdd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "42386086097fe1aa3c436e6ab07e09b9e1da4330a46c953f89d71afc615bd68a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f9191bf0-28c4-400f-8b89-4d8e7d01db6b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4e537f16-4aa2-413d-b34b-c56e70717547", "node_type": "1", "metadata": {}, "hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "class_name": "RelatedNodeInfo"}}, "hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "text": "Style Mapping\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import dim, opts\n\nhv.extension('bokeh')\n```\n\nOne of the major benefits of HoloViews is the fact that Elements are simple, declarative wrappers around your data, with clearly defined semantics describing how the dimensions of the data map to the screen. Usually the key dimensions (kdims) and value dimensions map to coordinates of the plot axes and/or the colormapped intensity. However there are a huge number of ways to augment the visual representation of an element by mapping dimensions to visual attributes. In this section we will explore how we can declare such mappings including complex transforms specified by so called ``dim`` objects.\n\nTo illustrate this point let us create a set of three points with x/y-coordinates and alpha, color, marker and size values and then map each of those value dimensions to a visual attribute by name. Note that by default kdims is x,y. However, in this example we also show that the names of the dimensions can be changed and we use 'x values' and 'y values' to represent the data series names.\n\n\n```python\ndata = {\n 'x values': [0, 1, 0.5],\n 'y values': [1, 0, 0.5],\n 'alpha': [0.5, 1, 0.3],\n 'color': ['red', 'blue', 'green'],\n 'marker': ['circle', 'triangle', 'diamond'],\n 'size': [15, 25, 40]\n}\n\nopts.defaults(opts.Points(size=8, line_color='black'))\n\nhv.Points(data, kdims=['x values','y values'] , vdims=['alpha', 'color', 'marker', 'size']).opts(\n alpha='alpha', color='color', marker='marker', size='size')\n```\n\nThis is the simplest approach to style mapping, dimensions can be mapped to visual attributes directly by name. However often columns in the data will not directly map to a visual property, e.g. we might want to normalize values before mapping them to the alpha, or apply a scaling factor to some values before mapping them to the point size; this is where ``dim`` transforms come in. Below are a few examples of using ``dim`` transforms to map a dimension in the data to the visual style in the plot:\n\n\n```python\npoints = hv.Points(np.random.rand(400, 4))\n\nbins = [0, .25, 0.5, .75, 1]\nlabels = ['circle', 'triangle', 'diamond', 'square']\n\nlayout = hv.Layout([\n points.relabel('Alpha' ).opts(alpha =dim('x').norm()),\n points.relabel('Angle' ).opts(angle =dim('x').norm()*360, marker='dash'),\n points.relabel('Color' ).opts(color =dim('x')),\n points.relabel('Marker').opts(marker=dim('x').bin(bins, labels)),\n points.relabel('Size' ).opts(size =dim('x')*10)\n])\n\nlayout.opts(opts.Points(width=250, height=250, xaxis=None, yaxis=None)).cols(5)\n```", "start_char_idx": 2, "end_char_idx": 2636, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4e537f16-4aa2-413d-b34b-c56e70717547": {"__data__": {"id_": "4e537f16-4aa2-413d-b34b-c56e70717547", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "34118d72-6677-4cb0-bca9-5e23eba07a99", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "bcbcb9e5d49fb856025a8c2503c429959ec4e6b90edf6d06ad34468179abca6d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0ebe32f7-b5fb-4eb7-bc21-ee54a8a2b2a7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "df48f360-3575-4cd3-8763-1b67d18b4e9c", "node_type": "1", "metadata": {}, "hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "class_name": "RelatedNodeInfo"}}, "hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "text": "What are dim transforms?\n\nIn the above example we saw how to use an ``dim`` to define a transform from a dimension in your data to the visual property on screen. A ``dim`` therefore is a simple way to declare a deferred transform of your data. In the simplest case an ``dim`` simply returns the data for a dimension without transforming it, e.g. to look up the ``'alpha'`` dimension on the points object we can create an ``dim`` and use the ``apply`` method to evaluate the expression:\n\n\n```python\nfrom holoviews import dim\n\nds = hv.Dataset(np.random.rand(10, 4)*10, ['x', 'y'], ['alpha', 'size'])\n\ndim('alpha').apply(ds)\n```", "start_char_idx": 2, "end_char_idx": 627, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "df48f360-3575-4cd3-8763-1b67d18b4e9c": {"__data__": {"id_": "df48f360-3575-4cd3-8763-1b67d18b4e9c", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "98c9128e-e18f-4acb-a9f1-df7b78632218", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "31a7cfa9448176ef4a4cb83837cbdfe68b0f8825e8e4cfd03493601da677ea99", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4e537f16-4aa2-413d-b34b-c56e70717547", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d2e30f48-710c-4349-8b5b-0e4f5c540f4c", "node_type": "1", "metadata": {}, "hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "class_name": "RelatedNodeInfo"}}, "hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "text": "Mathematical operators\n\nAn ``dim`` declaration allow arbitrary mathematical operations to be performed, e.g. let us declare that we want to subtract 5 from the 'alpha' dimension and then compute the ``min``:\n\n\n```python\nmath_op = (dim('alpha')-5).min()\nmath_op\n```\n\nPrinting the repr of the ``math_op`` we can see that it builds up an nested expression. To see the transform in action we will once again ``apply`` it on the points:\n\n\n```python\nmath_op.apply(ds)\n```\n\n ``dim`` objects implement most of the NumPy API, supports all standard mathematical operators and also support NumPy ufuncs.", "start_char_idx": 2, "end_char_idx": 594, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d2e30f48-710c-4349-8b5b-0e4f5c540f4c": {"__data__": {"id_": "d2e30f48-710c-4349-8b5b-0e4f5c540f4c", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ffd0022d-eb0c-4384-8c0c-9643d9427ae6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "63140a07984e9d4acf3ed1de58371794909dc5c0a7257de7e76d56b0ac7fcf99", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "df48f360-3575-4cd3-8763-1b67d18b4e9c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "75016e1c-d447-4d02-b7ad-971eb14f8ce5", "node_type": "1", "metadata": {}, "hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "class_name": "RelatedNodeInfo"}}, "hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "text": "Custom functions\n\nIn addition to standard mathematical operators it is also possible to declare custom functions which can be applied by name. By default HoloViews ships with three commonly useful functions.", "start_char_idx": 2, "end_char_idx": 209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "75016e1c-d447-4d02-b7ad-971eb14f8ce5": {"__data__": {"id_": "75016e1c-d447-4d02-b7ad-971eb14f8ce5", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b4e4994a-3d8d-4e8b-88c0-7baf26a4f02d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "71fe717fa318197283482607317511aed9aa8371f51a91354facb95d78a2f8e0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d2e30f48-710c-4349-8b5b-0e4f5c540f4c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7e2b5e99-72b2-4f6b-8ebb-aabff133a44d", "node_type": "1", "metadata": {}, "hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "class_name": "RelatedNodeInfo"}}, "hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "text": "**``norm``**\n\nUnity based normalization or features scaling normalizing the values to a range between 0-1 (optionally accepts ``min``/``max`` values as ``limits``, which are usually provided by the plotting system) using the expression:\n\n (values - min) / (max-min)\n \nfor example we can rescale the alpha values into a 0-1 range:\n\n\n```python\ndim('alpha').norm().apply(ds)\n```", "start_char_idx": 2, "end_char_idx": 383, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7e2b5e99-72b2-4f6b-8ebb-aabff133a44d": {"__data__": {"id_": "7e2b5e99-72b2-4f6b-8ebb-aabff133a44d", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "be4a3c3e-aeb9-4a74-a462-ffa29fafebd9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8094bc568f57d3274fd519c7ca10571a95a427efac4f310aed6b5d7792109041", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "75016e1c-d447-4d02-b7ad-971eb14f8ce5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "473d7594-f1ff-413a-a082-38957cdd6c6a", "node_type": "1", "metadata": {}, "hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "class_name": "RelatedNodeInfo"}}, "hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "text": "**``bin``**\n\nBins values using the supplied bins specified as the edges of each bin:\n\n\n```python\nbin_op = dim('alpha').bin([0, 5, 10])\n\nbin_op.apply(ds)\n```\n\nIt is also possible to provide explicit labels for each bin which will replace the bin center value:\n\n\n```python\ndim('alpha').bin([0, 5, 10], ['Bin 1', 'Bin 2']).apply(ds)\n```", "start_char_idx": 2, "end_char_idx": 335, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "473d7594-f1ff-413a-a082-38957cdd6c6a": {"__data__": {"id_": "473d7594-f1ff-413a-a082-38957cdd6c6a", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "83a32b7d-16d3-4c97-b06c-f0f2145a53dd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "e5dcf4add5f8ec9c2f1c05da1c929aeee52f9089425665176321ab562156fe35", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7e2b5e99-72b2-4f6b-8ebb-aabff133a44d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "99632d21-4790-4c18-bb44-8c65d17bf5f6", "node_type": "1", "metadata": {}, "hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "class_name": "RelatedNodeInfo"}}, "hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "text": "**``categorize``**\n\nMaps a number of discrete values onto the supplied list of categories, e.g. having binned the data into 2 discrete bins we can map them to two discrete marker types 'circle' and 'triangle':\n\n\n```python\ndim(bin_op).categorize({2.5: 'circle', 7.5: 'square'}).apply(ds)\n```\n\nThis can be very useful to map discrete categories to markers or colors.", "start_char_idx": 2, "end_char_idx": 366, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "99632d21-4790-4c18-bb44-8c65d17bf5f6": {"__data__": {"id_": "99632d21-4790-4c18-bb44-8c65d17bf5f6", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7d8b202f-8ac0-4be2-85d8-cab9fe32d876", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d5d89e5b4b1876c84dd279021eb3c56555816099718442b4a8df270cf0b47073", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "473d7594-f1ff-413a-a082-38957cdd6c6a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "29198336-47fd-4285-98b8-2e960bedc128", "node_type": "1", "metadata": {}, "hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "class_name": "RelatedNodeInfo"}}, "hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "text": "Style mapping with ``dim`` transforms\n\nThis allows a huge amount of flexibility to express how the data should be mapped to visual style without directly modifying the data. To demonstrate this we will use some of the more complex:\n\n\n```python\npoints.opts(\n alpha =(dim('x')+0.2).norm(),\n angle =np.sin(dim('y'))*360,\n color =dim('x')**2,\n marker=dim('y').bin(bins, labels),\n size =dim('x')**dim('y')*20, width=500, height=500)\n```\n\nLet's summarize the style transforms we have applied:\n \n* **alpha**=``(dim('x')+0.2).norm()``: The alpha are mapped to the x-values offset by 0.2 and normalized.\n* **angle**=``np.sin(dim('x'))*360``: The angle of each marker is the sine of the y-values, multiplied by 360\n* **color**=``'x'``: The points are colormapped by square of their x-values.\n* **marker**=``dim('y').bin(bins, labels)``: The y-values are binned and each bin is assignd a unique marker.\n* **size**=``dim('x')**dim('y')*20``: The size of the points is mapped to the x-values exponentiated with the y-values and scaled by 20\n\nThese are simply illustrative examples, transforms can be chained in arbitrarily complex ways to achieve almost any mapping from dimension values to visual style.", "start_char_idx": 2, "end_char_idx": 1212, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "29198336-47fd-4285-98b8-2e960bedc128": {"__data__": {"id_": "29198336-47fd-4285-98b8-2e960bedc128", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8c4004aa-668f-4498-92eb-d04c71890e50", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8926d512cb313d15b500ffcad6ccc7130f99275a323b51ea4619ee5c130c7869", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "99632d21-4790-4c18-bb44-8c65d17bf5f6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c2f045a7-5d6d-469d-acab-1b0944577f6f", "node_type": "1", "metadata": {}, "hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "class_name": "RelatedNodeInfo"}}, "hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "text": "Colormapping\n\nColor cycles and styles are useful for categorical plots and when overlaying multiple subsets, but when we want to map data values to a color it is better to use HoloViews' facilities for color mapping. Certain image-like types will apply colormapping automatically; e.g. for ``Image``, ``QuadMesh`` or ``HeatMap`` types the first value dimension is automatically mapped to the color. In other cases the values to colormap can be declared by providing a ``color`` style option that specifies which dimension to map into the color value.", "start_char_idx": 2, "end_char_idx": 552, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c2f045a7-5d6d-469d-acab-1b0944577f6f": {"__data__": {"id_": "c2f045a7-5d6d-469d-acab-1b0944577f6f", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "774d786d-66d4-4457-a7e3-827c0e224672", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d84248de5b262dbd48c63a3d31363fa92973a950dc79725fbcacf95fc83a92ba", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "29198336-47fd-4285-98b8-2e960bedc128", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "81e18f74-501d-49b8-ba8c-00205d156624", "node_type": "1", "metadata": {}, "hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "class_name": "RelatedNodeInfo"}}, "hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "text": "Named colormaps\n\nHoloViews accepts colormaps specified either as an explicit list of hex or HTML colors, as a Matplotlib colormap object, or as the name of a bokeh, matplotlib, and colorcet palettes/colormap (which are available when the respective library is imported). The named colormaps available are listed here (suppressing the `_r` versions) and illustrated in detail in the separate Colormaps user guide:\n\n\n```python\ndef format_list(l):\n print(' '.join(sorted([k for k in l if not k.endswith('_r')])))\n\nformat_list(hv.plotting.list_cmaps())\n```\n\nTo use one of these colormaps simply refer to it by name with the ``cmap`` style option:\n\n\n```python\nls = np.linspace(0, 10, 400)\nxx, yy = np.meshgrid(ls, ls)\nbounds=(-1,-1,1,1) # Coordinate system: (left, bottom, right, top)\nimg = hv.Image(np.sin(xx)*np.cos(yy), bounds=bounds).opts(colorbar=True, width=400)\n\nimg.relabel('PiYG').opts(cmap='PiYG') + img.relabel('PiYG_r').opts(cmap='PiYG_r')\n```", "start_char_idx": 2, "end_char_idx": 958, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "81e18f74-501d-49b8-ba8c-00205d156624": {"__data__": {"id_": "81e18f74-501d-49b8-ba8c-00205d156624", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e3f3f66b-979b-43f3-9c2b-c2c08dfeee0f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "801d2e5f0ab008f66eb7dbce43273bebbabe7d4cb489cca5461cc4931e893662", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c2f045a7-5d6d-469d-acab-1b0944577f6f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "eae2f8ef-184c-494c-86d4-0496f49f373d", "node_type": "1", "metadata": {}, "hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "class_name": "RelatedNodeInfo"}}, "hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "text": "Custom colormaps\n\nYou can make your own custom colormaps by providing a list of hex colors:\n\n\n```python\nimg.relabel('Listed colors').opts(cmap=['#0000ff', '#8888ff', '#ffffff', '#ff8888', '#ff0000'], colorbar=True, width=400)\n```", "start_char_idx": 2, "end_char_idx": 231, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "eae2f8ef-184c-494c-86d4-0496f49f373d": {"__data__": {"id_": "eae2f8ef-184c-494c-86d4-0496f49f373d", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f2c584b6-3b4f-4e5b-89af-9cdfe1ba7cc0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d8cc1bbeed247da1b1f5c00a03e63a1cce7b9e341c01d91814de726df74e680a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "81e18f74-501d-49b8-ba8c-00205d156624", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3040c26b-957c-4195-866c-4fe0503c3983", "node_type": "1", "metadata": {}, "hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "class_name": "RelatedNodeInfo"}}, "hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "text": "Discrete color levels\n\nLastly, existing colormaps can be made discrete by defining an integer number of ``color_levels``:\n\n\n```python\nimg.relabel('5 color levels').opts(cmap='PiYG', color_levels=5) + img.relabel('11 color levels').opts(cmap='PiYG', color_levels=11) \n```", "start_char_idx": 2, "end_char_idx": 272, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3040c26b-957c-4195-866c-4fe0503c3983": {"__data__": {"id_": "3040c26b-957c-4195-866c-4fe0503c3983", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1021a791-38e3-43c3-8d56-4530955eccab", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "301feca4e22e2d637684e4d9e97cc8582dfb2c15ceab62d686237fd497c98e5c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "eae2f8ef-184c-494c-86d4-0496f49f373d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4d678a08-ba14-4256-a99d-e71c28ec1f26", "node_type": "1", "metadata": {}, "hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "class_name": "RelatedNodeInfo"}}, "hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "text": "Explicit color mapping\n\nSome elements work through implicit colormapping, the prime example being the ``Image`` type. However, other elements can be colormapped using style mapping instead, by setting the color to an existing dimension.", "start_char_idx": 2, "end_char_idx": 238, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4d678a08-ba14-4256-a99d-e71c28ec1f26": {"__data__": {"id_": "4d678a08-ba14-4256-a99d-e71c28ec1f26", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fef4bb17-4279-4b00-9142-7fb6e0aa3e33", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "cd976bed21d671ca72b19c5757d8fb861dc6753bd8a854d3284a16386f6324ea", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3040c26b-957c-4195-866c-4fe0503c3983", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a221fdea-1814-48e8-9405-9ce34ee55659", "node_type": "1", "metadata": {}, "hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "class_name": "RelatedNodeInfo"}}, "hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "text": "Continuous values\n\nIf we provide a continuous value for the ``color`` style option along with a continuous colormap, we can also enable a ``colorbar``:\n\n\n```python\npolygons = hv.Polygons([{('x', 'y'): hv.Ellipse(0, 0, (i, i)).array(), 'z': i} for i in range(1, 10)[::-1]], vdims='z')\n\npolygons.opts(color='z', colorbar=True, width=380)\n```", "start_char_idx": 2, "end_char_idx": 341, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a221fdea-1814-48e8-9405-9ce34ee55659": {"__data__": {"id_": "a221fdea-1814-48e8-9405-9ce34ee55659", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b4b07d3e-5bc2-4946-8bf4-9c55bf5e9b08", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "c602c13a302d0f9c1e0d72343b9c6005f752fd89b31152b60e7954a27319a7f9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4d678a08-ba14-4256-a99d-e71c28ec1f26", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "73d999ba-2efe-4273-91f9-1743a39a00e9", "node_type": "1", "metadata": {}, "hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "class_name": "RelatedNodeInfo"}}, "hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "text": "Categorical values\n\nConversely, when mapping a categorical value into a set of colors, we automatically get a legend (which can be disabled using the ``show_legend`` option):\n\n\n```python\ncategorical_points = hv.Points((np.random.rand(100), \n np.random.rand(100), \n np.random.choice(list('ABCD'), 100)), vdims='Category')\n\ncategorical_points.sort('Category').opts(\n color='Category', cmap='Category20', size=8, legend_position='left', width=500)\n```", "start_char_idx": 2, "end_char_idx": 515, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "73d999ba-2efe-4273-91f9-1743a39a00e9": {"__data__": {"id_": "73d999ba-2efe-4273-91f9-1743a39a00e9", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2a2aa44b-fba3-4f45-85bb-fa5cbb7e62f2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "eda08d17998044e3f101baf541735db11b4cf2cd152d6ce011240a8575661fc8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a221fdea-1814-48e8-9405-9ce34ee55659", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1015a4ae-4cd1-435a-b64e-ea85d10cb081", "node_type": "1", "metadata": {}, "hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "class_name": "RelatedNodeInfo"}}, "hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "text": "Explicit color mapping\n\nInstead of using a listed colormap, you can provide an explicit mapping from category to color. Here we will map the categories 'A', 'B', 'C' and 'D' to specific colors:\n\n\n```python\nexplicit_mapping = {'A': 'blue', 'B': 'red', 'C': 'green', 'D': 'purple'}\n\ncategorical_points.sort('Category').opts(color='Category', cmap=explicit_mapping, size=8)\n```", "start_char_idx": 2, "end_char_idx": 376, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1015a4ae-4cd1-435a-b64e-ea85d10cb081": {"__data__": {"id_": "1015a4ae-4cd1-435a-b64e-ea85d10cb081", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6d1ce441-8817-4c67-ac78-4a5145b10208", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "dcd8f9027eccd41983fa3f8b76168b146a4fdd7746bd254d4bd5c31ccc95dc2a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "73d999ba-2efe-4273-91f9-1743a39a00e9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b0c2ee55-f4cf-4402-a059-0513d96a17ad", "node_type": "1", "metadata": {}, "hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "class_name": "RelatedNodeInfo"}}, "hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "text": "Custom color intervals\n\nIn addition to a simple integer defining the number of discrete levels, the ``color_levels`` option also allows defining a set of custom intervals. This can be useful for defining a fixed scale, such as the Saffir-Simpson hurricane wind scale. Below we declare the color levels along with a list of colors, declaring the scale. Note that the levels define the intervals to map each color to, so if there are N colors we have to define N+1 levels.\n\nHaving defined the scale we can generate a theoretical hurricane path with wind speed values and use the ``color_levels`` and ``cmap`` to supply the custom color scale:\n\n\n```python\nlevels = [0, 38, 73, 95, 110, 130, 156, 999] \ncolors = ['#5ebaff', '#00faf4', '#ffffcc', '#ffe775', '#ffc140', '#ff8f20', '#ff6060']\n\npath = [\n (-75.1, 23.1, 0), (-76.2, 23.8, 0), (-76.9, 25.4, 0), (-78.4, 26.1, 39), (-79.6, 26.2, 39),\n (-80.3, 25.9, 39), (-82.0, 25.1, 74), (-83.3, 24.6, 74), (-84.7, 24.4, 96), (-85.9, 24.8, 111),\n (-87.7, 25.7, 111), (-89.2, 27.2, 131), (-89.6, 29.3, 156), (-89.6, 30.2, 156), (-89.1, 32.6, 131),\n (-88.0, 35.6, 111), (-85.3, 38.6, 96)\n]\n\nhv.Path([path], vdims='Wind Speed').opts(\n color='Wind Speed', color_levels=levels, cmap=colors, line_width=8, colorbar=True, width=450\n)\n```", "start_char_idx": 2, "end_char_idx": 1299, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b0c2ee55-f4cf-4402-a059-0513d96a17ad": {"__data__": {"id_": "b0c2ee55-f4cf-4402-a059-0513d96a17ad", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0d747b20-4035-4734-b036-60eaaec3cadc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "51ee20b52055cd92270984cf391ab77644bab6d08a5c33a8c000471dde8eca97", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1015a4ae-4cd1-435a-b64e-ea85d10cb081", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0ed620a5-84ec-4518-bd1f-96b592520ff4", "node_type": "1", "metadata": {}, "hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "class_name": "RelatedNodeInfo"}}, "hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "text": "Setting color ranges\n\nFor an image-like element, color ranges are determined by the range of the `z` value dimension, and they can thus be controlled using the ``.redim.range`` method with `z`. As an example, let's set some values in the image array to NaN and then set the range to clip the data at 0 and 0.9. By declaring the ``clipping_colors`` option we can control what colors are used for NaN values and for values above and below the defined range:\n\n\n```python\nclipping = {'min': 'red', 'max': 'green', 'NaN': 'gray'}\noptions = dict(cmap='Blues', colorbar=True, width=300, height=230, axiswise=True)\n\narr = np.sin(xx)*np.cos(yy)\narr[:190, :127] = np.nan\n\noriginal = hv.Image(arr, bounds=bounds).opts(**options)\ncolored = original.opts(clipping_colors=clipping, clone=True)\nclipped = colored.redim.range(z=(0, 0.9))\n\noriginal + colored + clipped\n```\n\nBy default (left plot above), the min and max values in the array map to the first color (white) and last color (dark blue) in the colormap, and NaNs are ``'transparent'`` (an RGBA tuple of (0, 0, 0, 0)), revealing the underlying plot background. When the specified `clipping_colors` are supplied (middle plot above), NaN values are now colored gray, but the plot is otherwise the same because the autoranging still ensures that no value is mapped outside the available color range. Finally, when the `z` range is reduced (right plot above), the color range is mapped from a different range of numerical `z` values, and some values now fall outside the range and are thus clipped to red or green as specified.", "start_char_idx": 2, "end_char_idx": 1572, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0ed620a5-84ec-4518-bd1f-96b592520ff4": {"__data__": {"id_": "0ed620a5-84ec-4518-bd1f-96b592520ff4", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b7a5e0d6-630b-40f9-ab32-0e90a5492b79", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "084e8e691644b3a5178ca0ef5a829e4f4417004c0170c10655987fd06934c07a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b0c2ee55-f4cf-4402-a059-0513d96a17ad", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ce2df8cf-7727-4ff1-b911-6406902cfa4e", "node_type": "1", "metadata": {}, "hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "class_name": "RelatedNodeInfo"}}, "hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "text": "Normalization modes\n\nWhen using a colormap, there are three available color normalization or `cnorm` options to determine how numerical values are mapped to the range of colors in the colorbar:\n\n* `linear`: Simple linear mapping (used by default)\n* `log`: Logarithmic mapping\n* `eq_hist`: Histogram-equalized mapping\n\nThe following cell defines an `Image` containing random samples drawn from a normal distribution (mean of 3) with a square of constant value 100 in the middle, shown with the three `cnorm` modes:\n\n\n```python\nnp.random.seed(42)\ndata = np.random.normal(loc=3, scale=0.3, size=(100,100))\nprint(\"Mean value of random samples is {mean:.3f}, \".format(mean=np.mean(data))\n + \"which is much lower\\nthan the black square in the center (value 100).\")\ndata[45:55,45:55] = 100\n\nimopts=dict(colorbar=True, xaxis='bare', yaxis='bare', height=160, width=200)\npattern = hv.Image(data)\n\n( pattern.options(cnorm='linear', title='linear', **imopts) \n + pattern.options(cnorm='log', title='log', **imopts)\n + pattern.options(cnorm='eq_hist', title='eq_hist', **imopts))\n```\n\nThe `'linear'` mode is very easy to interpret numerically, with colors mapped to numerical values linearly as indicated. However, as you can see in this case, high-value outliers like the square here can make it difficult to see any structure in the remaining values. The Gaussian noise values all map to the first few colors at the bottom of the colormap, resulting in a background that is almost uniformly yellow even though we know the data includes a variety of different values in the background area.\n\nIn the `'log'` mode, the random values are a little easier to see but these samples still use a small portion of the colormap. Logarithmic colormaps are most useful when you know that you are plotting data with an approximately logarithmic distribution.\n\nIn the `'eq_hist'` mode, colors are nonlinearly mapped according to the actual distribution of values in the plot, such that each color in the colormap represents an approximately equal number of values in the plot (here with few or no colors reserved for the nearly empty range between 10 and 100). In this mode both the outliers and the overall low-amplitude noise can be seen clearly, but the non-linear distortion can make the colors more difficult to interpret as numerical values.\n\nWhen working with unknown data distributions, it is often a good idea to try all three of these modes, using `eq_hist` to be sure that you are seeing all of the patterns in the data, then either `log` or `linear` (depending on which one is a better match to your distribution) with the values clipped to the range of values you want to show.", "start_char_idx": 2, "end_char_idx": 2682, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ce2df8cf-7727-4ff1-b911-6406902cfa4e": {"__data__": {"id_": "ce2df8cf-7727-4ff1-b911-6406902cfa4e", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bb6d08ac-ca40-479f-bc9c-06c097d7c542", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5c42e32a4f184bdded90c8c08c3a16c878a5bff58734b0b6df349469d121bf92", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0ed620a5-84ec-4518-bd1f-96b592520ff4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3872b08f-6482-4cd8-bd9c-ccda1e87af2f", "node_type": "1", "metadata": {}, "hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "class_name": "RelatedNodeInfo"}}, "hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "text": "Other colormapping options\n\n* ``clim_percentile``: Percentile value to compute colorscale robust to outliers. If `True`, uses 2nd and 98th percentile; otherwise uses the specified percentile value. \n* ``cnorm``: Color normalization to be applied during colormapping. Allows switching between 'linear', 'log', and 'eq_hist'.\n* ``logz``: Enable logarithmic color scale (same as `cnorm='log'`; to be deprecated at some point)\n* ``symmetric``: Ensures that the color scale is centered on zero (e.g. ``symmetric=True``)", "start_char_idx": 2, "end_char_idx": 516, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3872b08f-6482-4cd8-bd9c-ccda1e87af2f": {"__data__": {"id_": "3872b08f-6482-4cd8-bd9c-ccda1e87af2f", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "86a79bfd-2925-451d-ba58-38c78df04ee2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "4009dee51e05d685574cd008547b9b0ca05f701252c44c361338adedc85005cd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ce2df8cf-7727-4ff1-b911-6406902cfa4e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5e8e148d-5d1d-483d-a53b-7a88596bd559", "node_type": "1", "metadata": {}, "hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "class_name": "RelatedNodeInfo"}}, "hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "text": "Cycles and Palettes\n\nFrequently we want to plot multiple subsets of data, which is made easy by using ``Overlay`` and ``NdOverlay`` objects. When overlaying multiple elements of the same type they will need to be distinguished visually, and HoloViews provides two mechanisms for styling the different subsets automatically in those cases:\n\n* ``Cycle``: A Cycle defines a list of discrete styles\n* ``Palette``: A Palette defines a continuous color space which will be sampled discretely", "start_char_idx": 2, "end_char_idx": 487, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5e8e148d-5d1d-483d-a53b-7a88596bd559": {"__data__": {"id_": "5e8e148d-5d1d-483d-a53b-7a88596bd559", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e5db059f-174b-4a39-8157-4f37e06caeeb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "7d71988e5733757dbd1ec5abffa235acd347004ad404515f9b929b66d002654c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3872b08f-6482-4cd8-bd9c-ccda1e87af2f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "047eae63-5926-43bc-9906-2584a2334791", "node_type": "1", "metadata": {}, "hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "class_name": "RelatedNodeInfo"}}, "hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "text": "Cycle\n\nA ``Cycle`` can be applied to any of the style options on an element. By default, most elements define a ``Cycle`` on the color property. Here we will create an overlay of three ``Points`` objects using the default cycles, then display it using the default cycles along with a copy where we changed the dot color and size using a custom ``Cycle``:\n\n\n```python\npoints = (\n hv.Points(np.random.randn(50, 2) ) *\n hv.Points(np.random.randn(50, 2) + 1 ) *\n hv.Points(np.random.randn(50, 2) * 0.5)\n)\n\ncolor_cycle = hv.Cycle(['red', 'green', 'blue'])\npoints + points.opts(opts.Points(color=color_cycle), clone=True)\n```\n\nHere color has been changed to cycle over the three provided colors, while size has been specified as a constant (though a cycle like `hv.Cycle([2,5,10])` could just as easily have been used for the size as well).", "start_char_idx": 2, "end_char_idx": 851, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "047eae63-5926-43bc-9906-2584a2334791": {"__data__": {"id_": "047eae63-5926-43bc-9906-2584a2334791", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6f30f486-7f33-4394-b0c3-52082fcc21ab", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "7610721458ccae61912fc80e087af690d86e821f85e7850f73d9c0f76d7d1d40", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5e8e148d-5d1d-483d-a53b-7a88596bd559", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "91285009-c0df-461e-9900-3a34cc1eb2c3", "node_type": "1", "metadata": {}, "hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "class_name": "RelatedNodeInfo"}}, "hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "text": "Defaults\n\nIn addition to defining custom color cycles by explicitly defining a list of colors, ``Cycle`` also defines a list of default Cycles generated from bokeh Palettes and matplotlib colormaps:\n\n\n```python\nformat_list(hv.Cycle.default_cycles.keys())\n```\n\n(Here some of these Cycles have a reversed variant ending in `_r` that is not shown.)\n\nTo use one of these default Cycles simply construct the Cycle with the corresponding key:\n\n\n```python\nxs = np.linspace(0, np.pi*2)\ncurves = hv.Overlay([hv.Curve(np.sin(xs+p)) for p in np.linspace(0, np.pi, 10)])\n\ncurves.opts(opts.Curve(color=hv.Cycle('Category20'), width=600))\n```", "start_char_idx": 2, "end_char_idx": 630, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "91285009-c0df-461e-9900-3a34cc1eb2c3": {"__data__": {"id_": "91285009-c0df-461e-9900-3a34cc1eb2c3", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "601c4637-9723-41e5-a1f7-8a66aa5d2be4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "c3fc2a97c1b6d720d6640368a20e0deeb05fdf23f902fafb545e50d5c2ede50c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "047eae63-5926-43bc-9906-2584a2334791", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "07adad9b-22ac-4667-969f-3227e5bea3d7", "node_type": "1", "metadata": {}, "hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "class_name": "RelatedNodeInfo"}}, "hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "text": "Markers and sizes\n\nThe above examples focus on color Cycles, but Cycles may be used to define any style option. Here let's use them to cycle over a number of marker styles and sizes, which will be expanded by cycling over each item independently. In this case we are cycling over three Cycles, resulting in the following style combinations:\n\n1. ``{'color': '#30a2da', 'marker': 'x', 'size': 10}``\n2. ``{'color': '#fc4f30', 'marker': '^', 'size': 5}``\n3. ``{'color': '#e5ae38', 'marker': '+', 'size': 10}``\n\n\n```python\ncolor = hv.Cycle(['#30a2da', '#fc4f30', '#e5ae38'])\nmarkers = hv.Cycle(['x', '^', '+'])\nsizes = hv.Cycle([10, 5])\npoints.opts(opts.Points(line_color=color, marker=markers, size=sizes))\n```", "start_char_idx": 2, "end_char_idx": 708, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "07adad9b-22ac-4667-969f-3227e5bea3d7": {"__data__": {"id_": "07adad9b-22ac-4667-969f-3227e5bea3d7", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "59617531-e5b3-461c-9d94-17b808b39ddc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "ff0ca050084dee6a66964adde212322e13efcfb89e56fb112f9d638c5befa3ac", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "91285009-c0df-461e-9900-3a34cc1eb2c3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cd1f8d63-989c-4a39-bdbe-0e818388323c", "node_type": "1", "metadata": {}, "hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "class_name": "RelatedNodeInfo"}}, "hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "text": "Palettes\n\nPalettes are similar to cycles, but treat a set of colors as a continuous colorspace to be sampled at regularly spaced intervals. Again they are made automatically available from existing colormaps (with `_r` versions also available):\n\n\n```python\nformat_list(hv.Palette.colormaps.keys())\n```\n\n(Here each colormap `X` has a corresponding version `X_r` with the values reversed; the `_r` variants are suppressed above.)\n\nAs a simple example we will create a Palette from the Spectral colormap and apply it to an Overlay of 6 Ellipses. Comparing it to the Spectral ``Cycle`` we can immediately see that the Palette covers the entire color space spanned by the Spectral colormap, while the Cycle instead uses the first 6 colors of the Spectral colormap:\n\n\n```python\nellipses = hv.Overlay([hv.Ellipse(0, 0, s) for s in range(6)])\n\nellipses.relabel('Palette').opts(opts.Ellipse(color=hv.Palette('Spectral'), line_width=5), clone=True) +\\\nellipses.relabel('Cycle' ).opts(opts.Ellipse(color=hv.Cycle( 'Spectral'), line_width=5), clone=True)\n```\n\nThus if you want to have have a discrete set of distinguishable colors starting from a list of colors that vary slowly and continuously, you should usually supply it as a Palette, not a Cycle. Conversely, you should use a Cycle when you want to iterate through a specific list of colors, in order, without skipping around the list like a Palette will.", "start_char_idx": 2, "end_char_idx": 1405, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cd1f8d63-989c-4a39-bdbe-0e818388323c": {"__data__": {"id_": "cd1f8d63-989c-4a39-bdbe-0e818388323c", "embedding": null, "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fb699c31-cab7-4cc3-a56e-e111215e93e0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "07adad9b-22ac-4667-969f-3227e5bea3d7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0bd2e9d1-373a-466b-b07a-6ecfaff36dd8", "node_type": "1", "metadata": {}, "hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "class_name": "RelatedNodeInfo"}}, "hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "text": "Generic options\n---------------\nautorange (default=None): Literal['x', 'y'] | None\n Whether to enable auto-ranging along the x- or y-axis when\n zooming. Requires HoloViews >= 1.16.\nclim: tuple\n Lower and upper bound of the color scale\ncnorm (default='linear'): str\n Color scaling which must be one of 'linear', 'log' or 'eq_hist'\ncolorbar (default=False): boolean\n Enables a colorbar\nfontscale: number\n Scales the size of all fonts by the same amount, e.g. fontscale=1.5\n enlarges all fonts (title, xticks, labels etc.) by 50%\nfontsize: number or dict\n Set title, label and legend text to the same fontsize. Finer control\n by using a dict: {'title': '15pt', 'ylabel': '5px', 'ticks': 20}\nflip_xaxis/flip_yaxis: boolean\n Whether to flip the axis left to right or up and down respectively\ngrid (default=False): boolean\n Whether to show a grid\nhover : boolean\n Whether to show hover tooltips, default is True unless datashade is\n True in which case hover is False by default\nhover_cols (default=[]): list or str\n Additional columns to add to the hover tool or 'all' which will\n includes all columns (including indexes if use_index is True).\ninvert (default=False): boolean\n Swaps x- and y-axis\nframe_width/frame_height: int\n The width and height of the data area of the plot\nlegend (default=True): boolean or str\n Whether to show a legend, or a legend position\n ('top', 'bottom', 'left', 'right')\nlogx/logy (default=False): boolean\n Enables logarithmic x- and y-axis respectively\nlogz (default=False): boolean\n Enables logarithmic colormapping\nloglog (default=False): boolean\n Enables logarithmic x- and y-axis\nmax_width/max_height: int\n The maximum width and height of the plot for responsive modes\nmin_width/min_height: int\n The minimum width and height of the plot for responsive modes\npadding: number or tuple\n Fraction by which to increase auto-ranged extents to make\n datapoints more visible around borders. Supports tuples to\n specify different amount of padding for x- and y-axis and\n tuples of tuples to specify different amounts of padding for\n upper and lower bounds.\nrescale_discrete_levels (default=True): boolean\n If `cnorm='eq_hist'` and there are only a few discrete values,\n then `rescale_discrete_levels=True` (the default) decreases\n the lower limit of the autoranged span so that the values are\n rendering towards the (more visible) top of the `cmap` range,\n thus avoiding washout of the lower values. Has no effect if\n `cnorm!=`eq_hist`.\nresponsive: boolean\n Whether the plot should responsively resize depending on the\n size of the browser. Responsive mode will only work if at\n least one dimension of the plot is left undefined, e.g. when\n width and height or width and aspect are set the plot is set\n to a fixed size, ignoring any responsive option.\nrot: number\n Rotates the axis ticks along the x-axis by the specified\n number of degrees.\nshared_axes (default=True): boolean\n Whether to link axes between plots\ntransforms (default={}): dict\n A dictionary of HoloViews dim transforms to apply before plotting\ntitle (default=''): str\n Title for the plot\ntools (default=[]): list\n List of tool instances or strings (e.g. ['tap', 'box_select'])\nxaxis/yaxis: str or None\n Whether to show the x/y-axis and whether to place it at the\n 'top'/'bottom' and 'left'/'right' respectively.\nxformatter/yformatter (default=None): str or TickFormatter\n Formatter for the x-axis and y-axis (accepts printf formatter,\n e.g.", "start_char_idx": 0, "end_char_idx": 3577, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0bd2e9d1-373a-466b-b07a-6ecfaff36dd8": {"__data__": {"id_": "0bd2e9d1-373a-466b-b07a-6ecfaff36dd8", "embedding": null, "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fb699c31-cab7-4cc3-a56e-e111215e93e0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cd1f8d63-989c-4a39-bdbe-0e818388323c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e9bde14e-c770-469f-92c4-338aed1a53bf", "node_type": "1", "metadata": {}, "hash": "e4284999019d8babe84c667d274b808f42360bf813fc13cbcfa2cc53b21afe6d", "class_name": "RelatedNodeInfo"}}, "hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "text": "rot: number\n Rotates the axis ticks along the x-axis by the specified\n number of degrees.\nshared_axes (default=True): boolean\n Whether to link axes between plots\ntransforms (default={}): dict\n A dictionary of HoloViews dim transforms to apply before plotting\ntitle (default=''): str\n Title for the plot\ntools (default=[]): list\n List of tool instances or strings (e.g. ['tap', 'box_select'])\nxaxis/yaxis: str or None\n Whether to show the x/y-axis and whether to place it at the\n 'top'/'bottom' and 'left'/'right' respectively.\nxformatter/yformatter (default=None): str or TickFormatter\n Formatter for the x-axis and y-axis (accepts printf formatter,\n e.g. '%.3f', and bokeh TickFormatter)\nxlabel/ylabel/clabel (default=None): str\n Axis labels for the x-axis, y-axis, and colorbar\nxlim/ylim (default=None): tuple or list\n Plot limits of the x- and y-axis\nxticks/yticks (default=None): int or list\n Ticks along x- and y-axis specified as an integer, list of\n ticks positions, or list of tuples of the tick positions and labels\nwidth (default=700)/height (default=300): int\n The width and height of the plot in pixels\nattr_labels (default=None): bool\n Whether to use an xarray object's attributes as labels, defaults to\n None to allow best effort without throwing a warning. Set to True\n to see warning if the attrs can't be found, set to False to disable\n the behavior.\nsort_date (default=True): bool\n Whether to sort the x-axis by date before plotting\nsymmetric (default=None): bool\n Whether the data are symmetric around zero. If left unset, the data\n will be checked for symmetry as long as the size is less than\n ``check_symmetric_max``.\ncheck_symmetric_max (default=1000000):\n Size above which to stop checking for symmetry by default on the data.\n\nResampling options\n------------------\naggregator (default=None):\n Aggregator to use when applying rasterize or datashade operation\n (valid options include 'mean', 'count', 'min', 'max' and more, and\n datashader reduction objects)\ndynamic (default=True):\n Whether to return a dynamic plot which sends updates on widget and\n zoom/pan events or whether all the data should be embedded\n (warning: for large groupby operations embedded data can become\n very large if dynamic=False)\ndatashade (default=False):\n Whether to apply rasterization and shading (colormapping) using\n the Datashader library, returning an RGB object instead of\n individual points\ndownsample (default=False):\n Whether to apply LTTB (Largest Triangle Three Buckets)\n downsampling to the element (note this is only well behaved for\n timeseries data). Requires HoloViews >= 1.16.\ndynspread (default=False):\n For plots generated with datashade=True or rasterize=True,\n automatically increase the point size when the data is sparse\n so that individual points become more visible\nrasterize (default=False):\n Whether to apply rasterization using the Datashader library,\n returning an aggregated Image (to be colormapped by the\n plotting backend) instead of individual points\nresample_when (default=None):\n Applies a resampling operation (datashade, rasterize or downsample) if\n the number of individual data points present in the current zoom range\n is above this threshold. The raw plot is displayed otherwise.\nx_sampling/y_sampling (default=None):\n Specifies the smallest allowed sampling interval along the x/y axis.\n\nGeographic options\n------------------\ncoastline (default=False):\n Whether to display a coastline on top of the plot, setting\n coastline='10m'/'50m'/'110m' specifies a specific scale.\ncrs (default=None):\n Coordinate reference system of the data specified as Cartopy\n CRS object, proj.4 string or EPSG code.\nfeatures (default=None): dict or list\n A list of features or a dictionary of features and the scale\n at which to render it. Available features include 'borders',\n 'coastline', 'lakes', 'land', 'ocean', 'rivers' and 'states'.\n Available scales include '10m'/'50m'/'110m'.\ngeo (default=False):\n Whether the plot should be treated as geographic (and assume\n PlateCarree, i.e. lat/lon coordinates).", "start_char_idx": 2892, "end_char_idx": 7096, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e9bde14e-c770-469f-92c4-338aed1a53bf": {"__data__": {"id_": "e9bde14e-c770-469f-92c4-338aed1a53bf", "embedding": null, "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fb699c31-cab7-4cc3-a56e-e111215e93e0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0bd2e9d1-373a-466b-b07a-6ecfaff36dd8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "class_name": "RelatedNodeInfo"}}, "hash": "e4284999019d8babe84c667d274b808f42360bf813fc13cbcfa2cc53b21afe6d", "text": "Geographic options\n------------------\ncoastline (default=False):\n Whether to display a coastline on top of the plot, setting\n coastline='10m'/'50m'/'110m' specifies a specific scale.\ncrs (default=None):\n Coordinate reference system of the data specified as Cartopy\n CRS object, proj.4 string or EPSG code.\nfeatures (default=None): dict or list\n A list of features or a dictionary of features and the scale\n at which to render it. Available features include 'borders',\n 'coastline', 'lakes', 'land', 'ocean', 'rivers' and 'states'.\n Available scales include '10m'/'50m'/'110m'.\ngeo (default=False):\n Whether the plot should be treated as geographic (and assume\n PlateCarree, i.e. lat/lon coordinates).\nglobal_extent (default=False):\n Whether to expand the plot extent to span the whole globe.\nproject (default=False):\n Whether to project the data before plotting (adds initial\n overhead but avoids projecting data when plot is dynamically\n updated).\nprojection (default=None): str or Cartopy CRS\n Coordinate reference system of the plot specified as Cartopy\n CRS object or class name.\ntiles (default=False):\n Whether to overlay the plot on a tile source. Tiles sources\n can be selected by name or a tiles object or class can be passed,\n the default is 'Wikipedia'.", "start_char_idx": 6366, "end_char_idx": 7686, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}}, "docstore/ref_doc_info": {"6eea93d1-39a8-4ec5-9b8c-389a7d6124d7": {"node_ids": ["a0d0bbe7-2a0a-4354-83cf-4f77f962c83a"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "c4b26310-14a9-4f28-9bd0-14ed5df9018c": {"node_ids": ["1c9cf590-947f-422b-ae18-d871d1052e1a"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "18df4da0-7e19-45ea-9333-9ca142034120": {"node_ids": ["81042881-e066-436b-9d7d-68fb67675dda"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "7ca09af5-c0b0-4544-a74f-8652e3a0afb4": {"node_ids": ["bacf1df5-b363-47d3-a08a-aba41b5e7654"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "d162d0f4-b40a-4ba0-a422-87e0d4249c2b": {"node_ids": ["08a15300-109c-47cc-96f4-a6526893408d"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "7e6a8696-a4e6-459b-8c22-3c88de3a4f3d": {"node_ids": ["f4d4cd8f-e0a1-43d1-a411-2a0903d35909"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "31c09404-4e75-48ec-a432-04c10811345b": {"node_ids": ["8feb6918-5691-4fda-b973-3c582b06301a"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "6a36d099-ba6a-45f3-8c65-c1ca56cbe7a5": {"node_ids": ["946b5ce4-1a23-4c63-a417-dd3284b9cb97"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "a9da5089-13fa-4881-a005-00e37c3398c7": {"node_ids": ["6867f344-f104-45ad-91df-1f4bf2922ab4"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "6de6fd75-c2dd-4ddd-a13e-a06d59ef3924": {"node_ids": ["39ab16a8-7c77-4fdb-ad1b-3ffef505e555"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "18858e5b-02c8-46a0-b1ce-80add02da61e": {"node_ids": ["a01cb84a-8780-498e-825a-3712c2a41c11"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "96eb20de-84b1-4467-908a-59e041bc4cdf": {"node_ids": ["7ddcca1f-4bfd-4723-b22f-705ef7ca8f46"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "ce2f59a7-3841-4efe-9aee-8007ca48ef7c": {"node_ids": ["13069f2a-295c-404f-a102-64bbfb0ff58a"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "89a535b3-8fd3-4640-aa09-a3478dd48b80": {"node_ids": ["4733be20-3bab-4dbd-8994-bc7d351c1c07"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "33403c52-9b09-449b-815d-c130f4dac152": {"node_ids": ["c06dc94b-3c80-4e93-81f0-dbf209c95c75"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "7330d96d-c6fa-43ab-8fa3-6e4e14915b8c": {"node_ids": ["81114efe-ef34-48cc-95e2-2541ad847eca"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "e0104155-829c-419d-9c39-5d1d6d6a084f": {"node_ids": ["2c48ea8f-4294-4e93-9458-c53c3c5fff09"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "c038d2e0-f2a8-49f2-8609-7316e87ac383": {"node_ids": ["6efea588-72a2-4a09-aa07-77f47d0d1335"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "e07a805f-a626-4871-8d38-2ff34156fb8e": {"node_ids": ["f4acd5c1-a743-4e10-8f56-76eec58cc734"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "75107a9d-2ab6-4a58-bfd3-3f007a8c6c35": {"node_ids": ["313a382c-12d3-4ef1-bacb-cfc39731aba6"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "3cead9ea-c177-43b3-949f-17474df6b846": {"node_ids": ["896dfa6b-13ad-4098-a82b-a2953fcb4e4b"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "a8c4d253-a257-411c-a861-a7ebbaa9deff": {"node_ids": ["5f213884-0e27-47dd-930a-b0055d30f6d0"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "8767175a-ed97-4f86-8298-586916ebf3bc": {"node_ids": ["e3ea3af3-18ce-4bb9-a2ee-0c81a2c106e2"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "ad484503-aafe-4c7d-8f5b-fc1db95ba96b": {"node_ids": ["026e53ee-7c11-46b4-8795-7a9c16829169"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "87e3ac7c-50fd-419f-9b05-9998bf4dc06d": {"node_ids": ["4fa1e274-8a7e-4da7-a261-12073723c286"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "bfa4f175-b3e0-465e-8a66-280cfecb3c77": {"node_ids": ["16fa0dfe-1f7c-4d2f-a848-3f5b9a158885"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "94be5b1a-40f1-4c65-a6cc-703cce79d8af": {"node_ids": ["34b99b21-2096-458e-8b7d-3f273709fdd9"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "b6368f5c-6ef3-445e-8438-1d79dd935241": {"node_ids": ["5aa32771-5a65-442c-bbc8-4845e8b0ab7b"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "08fd0d36-5043-4e09-b2ed-f5412bc963b0": {"node_ids": ["62a9c3dd-3119-41dd-a8fa-a3f81d09ccee"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "3fa5eda3-1cf2-4058-90a3-4afae2a72f2a": {"node_ids": ["8e88f950-7b7d-42cb-9939-a90482f709dc"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "2b0921c5-a4fd-48e9-b5d6-b2c51ee1e38c": {"node_ids": ["a13681e6-9734-478b-9208-affd351be458"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "0b265505-a030-47dd-bb53-7708f99cdd79": {"node_ids": ["48b5df67-6450-49a7-9af5-4dd2b56ae440"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "f13e8942-1cdb-42a4-a667-5bee5ee17dda": {"node_ids": ["7a98b790-175d-4801-979a-fcbda06e457f"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "093d230a-2ae9-4416-aa95-088a256a0432": {"node_ids": ["eaadbd44-8ef6-4664-bef9-1601a50308da"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "ad2f0614-b88a-4e84-aa20-e1b234063207": {"node_ids": ["03a3c696-449c-4791-ad09-19101e483f51"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "919e3576-6ad7-4fca-8de8-f08706787d07": {"node_ids": ["f9191bf0-28c4-400f-8b89-4d8e7d01db6b"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "6eb13c66-467e-458b-a45c-9ff5d1cb2bdd": {"node_ids": ["0ebe32f7-b5fb-4eb7-bc21-ee54a8a2b2a7"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "34118d72-6677-4cb0-bca9-5e23eba07a99": {"node_ids": ["4e537f16-4aa2-413d-b34b-c56e70717547"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "98c9128e-e18f-4acb-a9f1-df7b78632218": {"node_ids": ["df48f360-3575-4cd3-8763-1b67d18b4e9c"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "ffd0022d-eb0c-4384-8c0c-9643d9427ae6": {"node_ids": ["d2e30f48-710c-4349-8b5b-0e4f5c540f4c"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "b4e4994a-3d8d-4e8b-88c0-7baf26a4f02d": {"node_ids": ["75016e1c-d447-4d02-b7ad-971eb14f8ce5"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "be4a3c3e-aeb9-4a74-a462-ffa29fafebd9": {"node_ids": ["7e2b5e99-72b2-4f6b-8ebb-aabff133a44d"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "83a32b7d-16d3-4c97-b06c-f0f2145a53dd": {"node_ids": ["473d7594-f1ff-413a-a082-38957cdd6c6a"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "7d8b202f-8ac0-4be2-85d8-cab9fe32d876": {"node_ids": ["99632d21-4790-4c18-bb44-8c65d17bf5f6"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "8c4004aa-668f-4498-92eb-d04c71890e50": {"node_ids": ["29198336-47fd-4285-98b8-2e960bedc128"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "774d786d-66d4-4457-a7e3-827c0e224672": {"node_ids": ["c2f045a7-5d6d-469d-acab-1b0944577f6f"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "e3f3f66b-979b-43f3-9c2b-c2c08dfeee0f": {"node_ids": ["81e18f74-501d-49b8-ba8c-00205d156624"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "f2c584b6-3b4f-4e5b-89af-9cdfe1ba7cc0": {"node_ids": ["eae2f8ef-184c-494c-86d4-0496f49f373d"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "1021a791-38e3-43c3-8d56-4530955eccab": {"node_ids": ["3040c26b-957c-4195-866c-4fe0503c3983"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "fef4bb17-4279-4b00-9142-7fb6e0aa3e33": {"node_ids": ["4d678a08-ba14-4256-a99d-e71c28ec1f26"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "b4b07d3e-5bc2-4946-8bf4-9c55bf5e9b08": {"node_ids": ["a221fdea-1814-48e8-9405-9ce34ee55659"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "2a2aa44b-fba3-4f45-85bb-fa5cbb7e62f2": {"node_ids": ["73d999ba-2efe-4273-91f9-1743a39a00e9"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "6d1ce441-8817-4c67-ac78-4a5145b10208": {"node_ids": ["1015a4ae-4cd1-435a-b64e-ea85d10cb081"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "0d747b20-4035-4734-b036-60eaaec3cadc": {"node_ids": ["b0c2ee55-f4cf-4402-a059-0513d96a17ad"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "b7a5e0d6-630b-40f9-ab32-0e90a5492b79": {"node_ids": ["0ed620a5-84ec-4518-bd1f-96b592520ff4"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "bb6d08ac-ca40-479f-bc9c-06c097d7c542": {"node_ids": ["ce2df8cf-7727-4ff1-b911-6406902cfa4e"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "86a79bfd-2925-451d-ba58-38c78df04ee2": {"node_ids": ["3872b08f-6482-4cd8-bd9c-ccda1e87af2f"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "e5db059f-174b-4a39-8157-4f37e06caeeb": {"node_ids": ["5e8e148d-5d1d-483d-a53b-7a88596bd559"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "6f30f486-7f33-4394-b0c3-52082fcc21ab": {"node_ids": ["047eae63-5926-43bc-9906-2584a2334791"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "601c4637-9723-41e5-a1f7-8a66aa5d2be4": {"node_ids": ["91285009-c0df-461e-9900-3a34cc1eb2c3"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "59617531-e5b3-461c-9d94-17b808b39ddc": {"node_ids": ["07adad9b-22ac-4667-969f-3227e5bea3d7"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}, "fb699c31-cab7-4cc3-a56e-e111215e93e0": {"node_ids": ["cd1f8d63-989c-4a39-bdbe-0e818388323c", "0bd2e9d1-373a-466b-b07a-6ecfaff36dd8", "e9bde14e-c770-469f-92c4-338aed1a53bf"], "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}}}
\ No newline at end of file
+{"docstore/metadata": {"55405485-42c0-436f-b31c-3a0aafe29f33": {"doc_hash": "5ffd0e4cca5691ce796a30522b6bb5818c783da7d1353965184549646d441fbb"}, "c2164602-45b9-4aad-8d2e-3c2fa8d73647": {"doc_hash": "f8b72b30ecf46ce49d57f1b1fa4498a489d5e1f181a8c574c5c8aa57cb880853"}, "cb376bbf-00da-45c1-ad22-e9da3190b470": {"doc_hash": "15bf6f9ad88fb92bec5aa1a43e86111b6da767883c1b23e740eab0126237f411"}, "75499e0b-f963-4ee5-b3f9-2bc40101d3e2": {"doc_hash": "ed8e8b913be826455cd000f5a068b0669fbd2cc11c1458dd3a44994de1de912f"}, "f09dda05-763b-4f40-9047-da306c58a828": {"doc_hash": "399716f836e69abfd590935e39b1eccfa0dabb74e052d274b468438bf7c1cea5"}, "2956f9de-5058-46dc-98b1-87fb1f14512f": {"doc_hash": "8334e4f527b1cf01dd65ceed1755256c12fa5b8c3fdaac950906e41eb0e7224b"}, "044b361e-9c5e-4bfb-9543-91420862c382": {"doc_hash": "a28fe96233cbd8e22cd3d2fafe4b64f6c02bdc0f68842ff2ae306757a3528687"}, "526ee412-22f6-42ff-8e69-01cc4d9fe0d8": {"doc_hash": "8104fb248d29d01612d04daecdbd0dc06804f0ccadf4490b02b492f46db7e84c"}, "03dbd0f1-3bf3-47f3-a603-07fed9856cbf": {"doc_hash": "e378621e8809c8c91604022a76b93c8db2fdc9e9a43649dbfb7f4226d23995e4"}, "b379edd3-aa54-4f7f-b203-4275d6e084be": {"doc_hash": "4563b8755da8ae4c315a4f75e04774f4cfd2b50b595c0b12b89d2b0bff6670f7"}, "7b2fe83b-b9b5-486e-8cfe-d8b0779ceb54": {"doc_hash": "0623efcd74c73dcb9c9d5a55890e66e4934637ad74ac2ee820ef01c7ed75d7f7"}, "0a54e6df-ad0a-41d5-bb73-b899c6c66552": {"doc_hash": "bb551a98b080bbc0d34f1bfd6bf4e61c20c4401860476c832119c93d8956ed5a"}, "82782577-f92e-48ff-91a0-1df9646a035d": {"doc_hash": "e38f9c822c6550c31b6bb2a1f0f1431b62f13d201c1368d408ac89ea5770b74f"}, "9db166f4-1576-4cd0-a107-021ab5c6f079": {"doc_hash": "cbff0c9ccffe20aff6613ed617f9ff6ef22d719f033216117a78eb3ae499e5c3"}, "282b2871-1166-4e41-8a04-4fa2250ce637": {"doc_hash": "cd908eb49ec90e12a443127d3f2ac442bb706828699cc810d8c3d0cdd52e2e2b"}, "c76101c0-b876-449a-be5e-7cd9f00e80e7": {"doc_hash": "3751f373ba2899c1c25ed8bcfb5d311dc37ec4db054ddef7d17bfe7667d0dbdc"}, "9a703c34-2fba-409a-9ae7-0c5815de1961": {"doc_hash": "6baadc7aa629fa7fe477a62fcb34e37cfb624c9d9e3301251922e771c93663cf"}, "62dd6b8c-5140-410b-99ec-9d15fcbc2edb": {"doc_hash": "0637255d49a59fec95c2a768dc12dff3b4b012118a2fed17f95bb366485ad705"}, "a437b402-f243-4124-9fcd-530b50751fcc": {"doc_hash": "65b43d08d15b2f426179de7f1f26f1d93ef7422e27d27ad7484076295a3132b5"}, "e3f136b6-1dc1-47ab-b113-f043df0d3824": {"doc_hash": "2664c36f1b0d0c321ff19f9475d1ee2009996b3b74eaab3190d6781411578d3e"}, "8079e14f-c345-427e-acf6-eb64636f9815": {"doc_hash": "700594fd97c4a009f2dee98b67b688f5a62843ffcf494c5e62906f10a5494d05"}, "b8c66548-3a62-454a-acea-7d6c4917ab05": {"doc_hash": "7b62fad0e4589376f00c492742438dcc1bd9f1944b96d47f063ee96d7e2f6c71"}, "9eec48a3-60d7-4a50-8c2f-8b13630b4719": {"doc_hash": "0f8717d9101a16193e689970fbdb1cb193bd0883c571ce0e93f8f3460286861f"}, "79d60502-3ff4-46a1-b0ae-5a5afab313a5": {"doc_hash": "4672c73f6610cb3959cdd1853d212c27a3d5c27ab1fdc62a7d7d83c668eed82e"}, "66a2ddc4-9769-47b4-bd0d-957df08f070f": {"doc_hash": "703f82d7a26002eb89f297dc5ad0401201ccce14892b4c0944a1fd74fc1841b1"}, "4f42bef6-99d6-4595-bb9f-3f59c797eeed": {"doc_hash": "115a5c0c6bec0c484b9447b555ba0b3355d40acb4d1423e4afd9850865c1db8b"}, "a6b1a559-6520-45e1-a06c-4b37fe41b69e": {"doc_hash": "53a283a910dec9e6fb83bb5edd7e0d6e95b42ef130dce00bd57a3dfc0fd7b4f7"}, "60d7ca39-eb78-49a5-a2f8-69097af5681a": {"doc_hash": "20f9c86ceb17da1fd63cd8d435fdf915683597a607fd3cde67ee5a60e87e7276"}, "4d0f7d40-d879-4298-972c-7744cd33bc9e": {"doc_hash": "506e9fd40f9cae59fd2426a0d0ed1397f0fb04588a99cf74af44954a8986aa4b"}, "ea6f5752-1f4a-418d-b87e-94bfdcab903b": {"doc_hash": "ffc0d9a4a56d9e175093b0adc59505c118bb5345446ef8ca34012288df3ef0bb"}, "d96a246a-69bb-45ed-bf1a-fb7817cb55cf": {"doc_hash": "00bde40d8f09551d7ab9088bf8779af91f7571f4847c9a25f25a725bf2402f7b"}, "0db8be65-42a7-42bd-9267-2b36cab4b735": {"doc_hash": "228ce96dfa538a48e691408dadfeccf07c85246771fd4c4ea6f4b1490f15af55"}, "5e43b865-f498-4d60-b103-c88caed0c66e": {"doc_hash": "b6d1d6617e33b5e7d778c087fea5a86c2a63897906f68164ed66a86c862a3629"}, "8a9ca8fc-48da-4eaf-bf0a-f70ec9b8d176": {"doc_hash": "8dbc5bcb2ebfbe84b1a671a81566d39a05f503acc378b1cec613bde86409763f"}, "1337696a-6c5b-44d3-80c4-90c9bb4cfdc9": {"doc_hash": "912fd4f9df9f21fbe9e98c24c35ddc4b3d7898287f3ec0970eddb17163040cbb"}, "4f13e2c4-7e36-46bb-a420-d500d9328996": {"doc_hash": "221d7e26e19ffebb4201afd9346c472d59855ef0a81b720c6fe59692722c609c"}, "95078f9a-9ca7-424e-b462-1a2d831a0edb": {"doc_hash": "7c07131e90d6a95ff19b0160eb5a61a67714a9a91a0454f28a5834939a22b68c"}, "1369b4d2-63bf-4a29-ba32-8bad2d08ef21": {"doc_hash": "63c162c98d7b03b27bbdacfe07d354d7231a265e30b21073c023c039b1ca7385"}, "2b194c57-db06-4ce2-86ca-31f52d494b63": {"doc_hash": "619d6c8f95f29d9d4d9796320925640ce2cb3b405123f29f78129ca26cb34cf2"}, "28c147a8-5b06-443d-8194-8bdc7d760fc4": {"doc_hash": "29a9fc034b6104459e69f60df36abb7577d486afd161fdc5e15d84a7d759fe3a"}, "ee95fde1-095d-4a90-97f9-a3b9c11e8963": {"doc_hash": "5d0eea6998a317a87c68faec180f312532347fab68723a23b2f8090675b1e99d"}, "1d5c8c49-ba2b-4d34-ade0-d7bd8da383d8": {"doc_hash": "7793e66a5bb67a29e539051e73cd06fadba59bdc7aeede34ff9d792a076a95d3"}, "38355a40-a391-43c7-8f26-8bbdeca2ef38": {"doc_hash": "67421f59cdee438fe0cbd3acad0c9f06de923a71ff086d34946d4cab2ef18a5f"}, "c9500f3e-8cdd-4970-968d-1dc4fd1a7e36": {"doc_hash": "63690d197d9c1f639165a5a31445f50fb665ea8d3013384396e7b84e1113b768"}, "a4e16272-a9b5-41e3-ba7c-0dee4f8873e9": {"doc_hash": "e0af728c5366efdc4518723c17e8efc6e5609608b14294a9d68716f7c3076c9f"}, "cb622561-3e0f-403b-bc21-2de33a8c5df1": {"doc_hash": "9ca0fc8a181e41ea57c62ef33eaa18f50e7f49001ecc3048e63ef3ca2f663867"}, "cda9473d-6c06-43d8-9a92-bda43d75d1e7": {"doc_hash": "31ea9f49904824375d8c89f14eb8797d9783e58957fb02e47fb84ee443053b5d"}, "456577f6-aca4-49ed-b376-5a08c6b2e993": {"doc_hash": "d2e299be4653fb74798380cb65d576fe89dbc63928ee2a667153a84e27b9bbe3"}, "44ad086b-ae06-4352-92d8-7bb42f277317": {"doc_hash": "0845650168455a62d97cc9fdf01569a5f859632d0ef900b7ccdb20d0058cb91f"}, "ca00568a-ba57-4f5e-8f1e-5db12d493ef7": {"doc_hash": "08c6167ba3066ce681825b2f18de6ecdc4816cbd9f6ca874e1074de19683c9c1"}, "b8a42e78-b067-4d27-9b54-1f18c46da411": {"doc_hash": "9fd8a378649b907e9f22186373eef8b907093bc15fccf4ca6b465c97f9c686eb"}, "970db613-d63e-43b9-8508-fa578a9d36fe": {"doc_hash": "44ddffa6ad6ea8a6ba527d7b4459812de2c6175e0192ca3788047e8ded256090"}, "d634312d-38ea-427e-80ad-483a9587b817": {"doc_hash": "ceda8fdbed003779ad6ca40f870719978ccd6a521e056c31a1eb64eb521116d7"}, "a65274b4-74e4-4989-a1ab-19d00b668122": {"doc_hash": "ef04c35c70e4a0cd80d7b529899871b576422a26539917c23c82860d97c58557"}, "f9fd5fc4-b6fd-425d-bbd4-b2e01d81abd6": {"doc_hash": "2060907a4e7718ee522b7db06d301a63e191f24dfce73c7ca49f4d5055ceb909"}, "abcd8c71-bdcb-4ec9-bb6a-0d0c75730b20": {"doc_hash": "9b4af149ea78e1ef45cccac56473da5b656c4fc156f8d27765008195c39073e9"}, "954cd817-1227-41d6-b48d-001b7f07f54c": {"doc_hash": "c65c048ce45ce60f160db0fb45942d0555f6322d2653603681c5725d2927a8ed"}, "a8b8d33c-4f09-4257-9abf-1b776adeb97c": {"doc_hash": "32d957efc70f4fa2d555d6eb4dd254fa2fe7f2a525ee8d5d1298bc25ac072ab6"}, "901375ad-fe14-4238-8212-3ee953625d83": {"doc_hash": "9159dd40f5ad6e5e8e8bf02fc45cb15769425e824856d1f7ff7411fde18133a0"}, "4b294cc8-2db0-43c1-bbbb-f1491070f67b": {"doc_hash": "ab7b290d107152959fa8c940a2d31b4507468b681109cdfb136f9462ea3d618e"}, "a9b114ad-0039-4d8d-822d-a573af279002": {"doc_hash": "11da14625b35cbcae0e19cff832f7eeba83cd79072fad8e87f6893e1b1154343"}, "37a712a3-b2d8-4781-99ac-ea6d1fb3c2f8": {"doc_hash": "20823d032de3239001fe854826d3c7c9df454d2280f4ebafaa7fd04cdb30d0af"}, "e7d3ebff-1975-447b-a165-f28ade396ddc": {"doc_hash": "a6083ebc7561d035eb229c51c54b79734f43e0478b722305d321324e1e8d6d5f"}, "128938f1-3816-4f5c-8ef2-0ff3d9e07aae": {"doc_hash": "6b9231e763962e54e314ab18c42c49a6cdd432d3d905b6c8cc591b305a3a99e7"}, "6a83f03f-375c-411c-8fda-9dbe5be1af42": {"doc_hash": "6685ee7a22feec2a5f25b46374460efa8b02c24723c67ded0a44e617783ac67b"}, "5c149c1f-e615-4ab2-a761-4519d5667d26": {"doc_hash": "e52d09eb114a3187ecd17affbaa88029b4dca6bd5012f94fddee2a8c7ab63226"}, "e05eddbe-fba2-4889-a7f1-8264b84a1402": {"doc_hash": "71e14610a0040b0df3da6244ce0de214fb249b3110961ccc43d4cc4253608bbc"}, "78bd63f9-3645-4535-8e06-6ca17dd50e73": {"doc_hash": "b655f495283addc1d51798f1b53c22577baed684ee90524eb30ddad2cbf5a759"}, "faa439a6-e9a5-4127-ae38-4ad049af31fd": {"doc_hash": "03875d62356fdf7cfff47fa815d45f1f6539a27c7984641212d5b375f2fabc75"}, "cf590306-fff5-496c-acda-56abb66b726a": {"doc_hash": "50374236bfb813f6a91148a422854e427e5db83b30c0548ff9439c00a1d6607d"}, "8bdfe187-67ac-49d8-bee4-8f4f3958c581": {"doc_hash": "6a95966c4f8afd26a7c81ddfe94e166e3258aa011e36ba58ae6eff6bcaa23436"}, "0cafb10b-b577-49e1-b565-eb9c3c830c39": {"doc_hash": "3e36dc3c79fbbdfb79cf94f6aa5acada59f1eae2bdca7b6d897c09ddc9bd517b"}, "9e50b097-2746-4afa-8bb3-fe9839b30d78": {"doc_hash": "dfef9ecbd41422ebb89bb3987a7c0658c1a2e6dd438687597bafa9afc172a0cf"}, "17e8212c-e9b6-453e-831f-854b3543a430": {"doc_hash": "53765a01e8d932e2bf0ff6e171b292ef11f4116de0e1eb26fa18573f750b73a8"}, "f0a99e96-b455-443c-b9de-922fdd39a6f5": {"doc_hash": "38745dd2f6bf09cb92d6171fc811beb1ab1969de3197e96f2c619adf4127d87e"}, "9b92ef93-0802-4512-8762-88ac51492d41": {"doc_hash": "ded33818b0899d7fc0a7e5158d41aa5a7167431f935892cb3fa5ef0369b309c1"}, "c251b1e5-21d4-4925-bd40-67ffff3489f9": {"doc_hash": "73bbd0c4566bce56a5e5db2264f011859dec5f7d2d6023c08d7cc327fba027d1"}, "f06861a2-a831-490e-826f-02f005f04700": {"doc_hash": "15a9f0b00548490b8a72ac5c15bdc4923dd5727420c681db1a969813d705299a"}, "cc308c70-6355-4301-ac47-a6962e476be3": {"doc_hash": "171374d83e9da75fb90de56d12dae5b84b0321652c3d72893970e15bc9dd0315"}, "58c28e59-6928-460d-bc4a-02adc56a9b23": {"doc_hash": "4e15235f9cb6011660067eee8e0169ff8c99fb546ce5f8dddf6a8debf627f253"}, "fd85052b-e1ab-411e-8555-a16a5604827d": {"doc_hash": "5d957b2ebd383913f542b007661ff275d5fee9cf9ba2e44d3487d7a003d967fd"}, "93ae6eff-f6a6-415b-a497-72b804e2fdec": {"doc_hash": "230e418917a1df7f63cb60acad201a21448f77934616046e04f0fad8b05f4bed"}, "13d8a539-0029-4ede-8e47-bfb7ccec4bbb": {"doc_hash": "a9eb8d2d4bed2bbd09e0051871371e41c465d3947006c78167e318b1704e5757"}, "3791729d-7890-4ac6-a98b-ca248b038385": {"doc_hash": "627fd54b794da74af6537ef7c6a8f17d43e6a00d7b545af2b67ca934148c0765"}, "e1458af2-3709-4942-acfc-680ff5e44b6f": {"doc_hash": "e7825275bb61507711a8b520da301abac28c0ca26e8d3d5cce6ff97ac544dab5"}, "7e0887e8-50d7-46b0-a480-f7426d3863e5": {"doc_hash": "0a637a849d544b64e68a7a8bd0ce70cba017661c8709bc4cf1bc5512188f1200"}, "f1263a5e-890a-4100-8f67-b12c3efccc51": {"doc_hash": "8889149c404f1e91dc4ee6a7c406db1553929253cc98d59532e0f79b2ffab1b3"}, "5e63e422-c989-4f07-8f3c-b148be20ed40": {"doc_hash": "c0b39932827b31507a94ccb2ddc16995dff0d73ab8575ce59de0076ca9d0bedb"}, "29303cba-da57-46fa-ba55-e1623b30caad": {"doc_hash": "aa238a5072eac5ca048afa656a09ed1aa8a80695624173937a1ca0faaf510538"}, "bb55b7f4-789b-46b6-8856-fb7370234033": {"doc_hash": "43ed9fca863f159395382e1c8df5c815fd5f5eb52c01c21a6a3ba8aeba5c3134"}, "7fe21dc9-e6d5-4e99-859c-c1905abb7a79": {"doc_hash": "6143028ddfab7ca065da997c8d1222285bac5609f1af11780da9c4bf4e9efd8d"}, "0b2c6fb9-d4cb-4bbc-a903-350bdd7045c0": {"doc_hash": "15f7fb85c8ce8448849d4fcdedae32078859f49f4cf27326be0f561f7e73fe90"}, "70b130f6-dc82-49fb-907b-341935bf5c2e": {"doc_hash": "b224eae70a9fcd5ce0f77ce15bb18ae98502e214feda7ea80902668958983396"}, "914a7db0-a0e1-483c-88ee-8a7aee656d0e": {"doc_hash": "9867902f8e8825e5f818d8ee0929d947edccd7fbd390563abdab6de307d1bd52"}, "bfa5ef2a-379d-4bec-a437-e9ac29646a80": {"doc_hash": "300292174d3f582986ef799a450b236973076e0eef4f2a3560d159c15d39a596"}, "6edca6c1-87cb-4ee2-a4a8-bda516e35ce1": {"doc_hash": "e81d2711f7d4ff0240413cb1b618ac848d46ea749ac1b07596616f1562d0cf9a"}, "12f33b98-2bfe-4e5e-b123-ea8272746dcc": {"doc_hash": "21f22ba8fd3f24e2a10786c4243fb3f3b6e6ef239cfe8567b661ce3d441190a8"}, "bd08e15d-804f-465f-b4cd-806dca9b2bca": {"doc_hash": "c5b6bf8b34dec7f66b24e715590c2147cd5f2b9ad47553ae9326391b013c057a"}, "8d830914-60ef-47f3-aa87-0b7d1b029025": {"doc_hash": "52b00c1b17fb2adf007acc6591f5cea0cb778789fc2bf76257e14d306123ff80"}, "060a2418-dad9-4b37-8279-d324b4ba6f80": {"doc_hash": "cc20d992bbcef53c9c54600229c18f9bbdda73d4d8805ec70368ace8b2ca458a"}, "7682e8a6-c8d1-406c-a8b4-36dc53f39d58": {"doc_hash": "0ec45159abedcdaa119a0d5dc5bfa6d5b11ad02f7afa3f7043b4c433cbb700e0"}, "0930e77b-9427-473d-8819-466323f57143": {"doc_hash": "1f7299fd097e383b20f060c4328ace352c8b83bca3e7da85dbe66102167870a6"}, "a2ecfa92-cf7b-4721-bfe3-06c19ebdec14": {"doc_hash": "2650253a36f110b5c8e74c82e60106ba1fe95c67152be6f7ce944bfc964dcb25"}, "5312dda3-3869-4e2a-9abd-2131b816d2cd": {"doc_hash": "41baf6c768a325199e1c36be78ec0ab46b70a946557c5f69d2f67cadc0c724b6"}, "7a3bb692-f7e7-467d-a9ad-fe42d98cd712": {"doc_hash": "c108910b06f2187091bd0a28e6a8da1ec435c2b1490650d04bfa298677cc2d26"}, "fc8e90b6-06f4-4047-b6bd-9ab4705bd244": {"doc_hash": "f7c6c13187627c4a4c7b00280691da407b863bc7c32e07e45b4f307f16431790"}, "9f90f7f1-0d8b-4088-91dc-3e68ccff5622": {"doc_hash": "20a18fb4ff2487b5a3dc9ff6f596ca637217fb18010a9f517d6eaab907b6be39"}, "6e482ac6-d8c9-47b3-95ca-e886b8d498b5": {"doc_hash": "08df0f69dfa8bd9033e48ff1c0251763ce7029fa3b17d8e07a117447111daf35"}, "0f77421b-efd3-42e8-a96e-1d9e30ff74d8": {"doc_hash": "fb2d70ebb59e1132f7364c08b19e703f9a14c7aed1bcae259c2cdd300057048d"}, "2900fc6b-6ddb-4643-8923-87144ed6eedb": {"doc_hash": "cd2c07a6e06420458ba7e94d0faa86213e95e30cc01a68936c4935488eb01a3c"}, "889efd32-d2be-4293-b2a4-06af2505e9ba": {"doc_hash": "b45a4680ec1d1bee92a5054feac84b9cfc7cbbfc44767ed05a0e056519b9cfcf"}, "e2f650f3-0d70-4bb4-9c46-0d04e642c7db": {"doc_hash": "de04efaaf461c7f61cc0a65c5adbcc75ad1c504c78cee5b46b9da85245d4dc90"}, "626679c0-eb2c-4389-9387-ad10078f3d95": {"doc_hash": "1b255831dd226145d012f932476fd06671fc76d87b6b341b6bc18f1bc12908de"}, "2aad0690-5a03-449e-ab48-daac4e42bb5a": {"doc_hash": "00028bec93322bbaf5e5ae0bc62abbdc1581322e846b94fe889dd30333b4f30d"}, "0953a5cc-560b-47d8-8337-53a63204b61a": {"doc_hash": "926db032b8852a9d1c8478ae1f68cd648270c99e2b9bc102f130a4e9f9989419"}, "6840f554-4171-4595-aaa5-60664e1a4ceb": {"doc_hash": "9201e01eee4557073dfb467ce5bf7e2afc4240648da88844a768ad38a2f94412"}, "71cd0a7d-ca07-4319-b19a-c4d931ef207a": {"doc_hash": "4f2ef00acc9c011c50a2fab636bfa349c2d72a0e876a7739462e6773d8b212c0"}, "ea69e197-a5a4-4971-968d-62371a4565f3": {"doc_hash": "22d315522ae774d7648b6d231d99ba2a92507d4d908a8d9112cd86f730fabe51"}, "f865eb54-6f87-446f-96d4-3c4259ac8d79": {"doc_hash": "35d89cea711ccca36b0565d2307c3fc9a8f98d9462d5aa5a8da47af4ef7145dd"}, "31e2ad1a-3ced-4fbc-913b-49bcb7e1a405": {"doc_hash": "ab313f65decd4507972b7bf13ec5bdbfcdf2a2902fcbd9807b53bbf486acbe11"}, "faed368e-b4ef-470f-b89a-9049079c05e8": {"doc_hash": "a720a87e013c3c73f25600a930c2d1173e1b7051a2d5b6acb63acf14b4e67312"}, "6aac926c-ad7d-4f01-9b34-3ab974199883": {"doc_hash": "2cbb63b636ab9617a3f9dd7bcf3881915088a0932c04e6b3975b3fed10f3e764"}, "9935cfd7-d3ca-4c1e-9943-52bbb1599070": {"doc_hash": "74197778c68c619252e1980f21e847e1f6fb77f2e71f9d4960200179a9e73297"}, "626860fd-a698-4a2d-87ed-da47d6821f2c": {"doc_hash": "1b88a3a61f00e8ec35e0fe3a7665db96eb765ff119459a17e9d515e2377e9ad5"}, "39b1b238-a91c-47e9-9c35-769c3b189c16": {"doc_hash": "54f3de3acefc4145018663a9092ceed07db921646c817aa3788edbed13ce997c"}, "e6783d1e-565f-408f-b9c0-2cbb68f1374a": {"doc_hash": "e361e6ae7d935fcf225128259b26f1f5018dbd3ce0ddf99983ef61883c8038e9"}, "1146429a-022b-45c2-b96e-8499e10daee2": {"doc_hash": "c43191f29b7a20c0ee85a39a074b731fbed65c422dd6fb31fdb2e5f881071c22"}, "47f96e77-060e-436b-b2f1-d8a9f59674e1": {"doc_hash": "bc243b7d61c2f2928c65200f793a1fd086c732f431b1129f4520a62954347459"}, "62b1dba4-bd56-426c-94e3-5159644a427f": {"doc_hash": "a6f9e3e11c7cae7d9a932cfbdb8659748380ab8c06219fb2206aba62a4e922ed"}, "4f7fcdd8-9a80-448d-8426-1ebb3af79986": {"doc_hash": "9d01b535a6b14322536383e1349740cf0708c471bd3348834709a8438a026c1d"}, "6760058b-0b76-4bd8-a06f-577e41121c93": {"doc_hash": "9585ffa51d75e9f17c0df5f7ce893b404d5dc6c68a99de6e1b2058f3247dd78f"}, "ebe7e6da-b8a4-491e-9ec4-e4c8044c91e4": {"doc_hash": "6afcec2d6c4d4dc6893c7a7ddc0bd23993d726968ef3a093ad9a9929aae95f81"}, "2f8deaa1-1e14-43ca-b94c-f9247f547292": {"doc_hash": "a683a17cafc76842523a1437b2e8f2eb6dd64cc4251a4e1a76a2ad5fe80cb399"}, "df09742c-833c-49a7-bd14-2d96c4617f8c": {"doc_hash": "da03bf22af87d4688967022679a6d2a99b337495e179be154708682066e1a0da"}, "a5a1dd76-29e5-43ae-b82d-5b440a900663": {"doc_hash": "26a6574e9729f8676ffe18ced44776dd0eb5e50a1e92dfa0965e8839987bc6d7"}, "bfa9bff3-0f18-4aa5-87a4-12094a1a457c": {"doc_hash": "510bbec5fb05f47b468b1646e27d22e919c32c4904c751e27b6788c622dd7952"}, "ac58fbdd-8350-4af4-9c9c-91cf6f9ff526": {"doc_hash": "5a20c3e83fe7971334f683c5df4ee9f4b3ce89f6ef2e960d448da552e2ebc85a"}, "10e43059-88b0-415f-a932-baafad83601a": {"doc_hash": "edca39052aa7e4b1bb0ca70e3cf4d0bdf5197ac8fee7c18a3c98b05b605cdc3e"}, "763c41dc-2c69-478d-9c5a-98055a597c20": {"doc_hash": "886fcec23204614f156fd20efbebf36c27deaabcffd24d5cfc885fc98338f212"}, "fb2ca3f1-ce69-4098-8f6b-3390059ab252": {"doc_hash": "e644bfe7c62f3804912f68f3b280058654972b831c7bfac449735b48d005501b"}, "9ddcc535-6c13-4ae9-8669-18a01233c95e": {"doc_hash": "b3d3df169d68b3c8f26ef5d4fd9f07dd78f96acc6615ffbc7b90c28169f40630"}, "6050b290-2e20-40d9-a0db-e720b77d77af": {"doc_hash": "6996bc4b2d862fb68b0e986dfd3244d8e09d3ac8473d2a1dcceb64024dbc10e5"}, "d0ecde18-8418-4bcf-886a-fcc974c84640": {"doc_hash": "24449b39c4044f89a6ea3c7e54583712675909bf7b4e22fb4659af41bf5cbafa"}, "597efb37-4796-4536-aef9-ba194f78bcbc": {"doc_hash": "5387051c2daa8ecc929b232d9f48a1a3b740218052d9adc7f9e3d16f375e41b3"}, "44c217a2-f8f7-4f53-92df-72bce3888c58": {"doc_hash": "e66370b4e24236bbe6cb52ec9f50f7883f70539fc050575425f0c68f03dc5c17"}, "2a6554a7-ed4e-47a2-bb03-ab150264a69c": {"doc_hash": "52f9ac37a897f99f5c79a42c527ef3d2f6196d284dc64cb27d59a020436e314a"}, "2ca973ca-38e8-467d-ab50-d4956c09de49": {"doc_hash": "b6f8941fe43f3247c3549a57af4f83a2661926df1a70f8e88a0fdb3799ed3112"}, "368a37ae-0d5f-4de8-b8dc-bd2fd255311f": {"doc_hash": "360526bb2682ac5024fbc7e68b3e13e5c259bd51f75efca6af164b2791a3cf42"}, "34092c52-c063-432c-968c-948778f461c8": {"doc_hash": "b0d9eab7f737492c5fa3776b7554dac91cd9309c4a87bb05fda1608d4238987a"}, "cd5ccd72-8189-47a0-9ac7-29014ec7d2f6": {"doc_hash": "4ab516fd68664fe19a389f3db370078e6dc4a32853157ffdb82c0e4be420db8a"}, "12074480-b400-42d2-9b56-f2ce4b92d41f": {"doc_hash": "b591b74b377aa5651980bce9debed337a1dd8082ab0a2794272f9380fe78cd56"}, "ba4d0f4e-e3d7-4476-a795-37cc7604d458": {"doc_hash": "5b72c2661539e521cee1a9c22f418639a61220d7f93b58fee6e851cd95298937"}, "0e9b7caa-8be3-4887-ba8c-feb0b3a6d665": {"doc_hash": "44fc880a2c436f77eb159d658eeed61b0d980c11bb2d2e76f674fb759624e3b9"}, "2bfc3d48-83d4-4752-94f4-8bd3881c7439": {"doc_hash": "6dee113bba4e23f6a7100e3e9edcb5f67da657b13ede1047dd71ff28d75bbcc8"}, "501451b7-5d19-4b29-8f0c-6b4c20eb8593": {"doc_hash": "e6b33368cf4f5a0d130b507a7c2bffe7761c12780985f0be712ccfb6cac518c5"}, "48d6c511-65da-43f0-a9dd-ea3c450ce041": {"doc_hash": "1f1612bba49f35eabf0394cd1525725a596a5e1cd045c7db894ac8133c8ad74d"}, "1ade6589-10be-4a3a-b3e8-c4bba274101d": {"doc_hash": "03e8d9113ab9fb500f7d6a8dbc91cd2590c92c116ef813aa5fa8909d53d9b37d"}, "58555620-2c7a-4d0e-95ad-e8d46735fd6d": {"doc_hash": "70c0c659553d51471c380ff4b96789bfeb87a04c201705f81cdc54243b77a1e3"}, "aa9bf5e0-05c5-4055-95d9-742ece533aaf": {"doc_hash": "68fc1beab0dc73f8bbf83c6165967804afa24400ad119bd6f110c4c04cc67846"}, "d8be5c6e-59eb-472a-bce6-d22faa2505bc": {"doc_hash": "a8bba1f7d2fbf982cb2fe61fa22ccf01b4a43b832eb6d30ca38417d9c858556f"}, "89184dac-c148-4671-bf68-98842ad11dbd": {"doc_hash": "7ce72d1459a4d83e69b2209444e63d30a9fc91b4191a7a6f442eadb0510e46db"}, "7e048583-ed11-4d88-8e2b-30a22fb80bf3": {"doc_hash": "4458b5d4b13f66a739f13c4150c622441f2c12d341c122fc12c266f786ca8201"}, "faf2afa8-b152-40bc-ba0b-007ad057a901": {"doc_hash": "21055b8aead62129aac4e5a846a4388e4e629cfaf68939b05cbc6b82ad002fd9"}, "aad6b8e2-b5ab-4f58-983c-0f562a8bcfc0": {"doc_hash": "bf15ddb0e21533c1f7857508432317e2f5dc3e2a7fa6ec501af759e10085ff8b"}, "795fd61d-af80-411d-879a-abb57dd81e71": {"doc_hash": "3f905edb3a96e7959e7f1970db6595940bb27f5b8447769b97027101eb98764b"}, "ded80b12-92c4-4a5d-878c-b05f96d980cd": {"doc_hash": "c02ce394649453aa9561247f4987ea92e8712240851294f57e527ddb86c94845"}, "c142769f-bb82-4206-a3a4-1908c070f74c": {"doc_hash": "dc56f33b54354a3122a882a99c053237a0d1b46c470f79abf97ebe8152dd0d83"}, "45bea28a-d560-4a2d-b916-444cf707970a": {"doc_hash": "7fa8a0cdd490be8a3e7e555a431ce8dab253440f5a41fae4348867bf3afaef1d"}, "da519065-154d-46db-b57f-8c3609ed6810": {"doc_hash": "57f470a15d33b8c466ff7298f3aaf39fd43360bc63001e4822d012fea9ee9d43"}, "50fa7e76-af6b-4fdc-bb32-9ed21fe55dee": {"doc_hash": "428153d784f94c267fb672b5e695d8bab3625145181543753898945f140c3019"}, "35214eb7-8eed-4ac7-b8b2-737df1685244": {"doc_hash": "67992b442140393d2f77fed983b3b16807e7ff684d83fb62a426fe230e9ed986"}, "608f1986-8e83-4a8c-83b4-5550d4afd4d9": {"doc_hash": "35e32a10c4ff7c378636a6c56060d19e636ad63390cb34fdca22cc166e535e14"}, "fb8b67c6-88ff-4dde-b79c-580338f961df": {"doc_hash": "f12b4ef141bb389226c3f90f98780a71e2a0a618957fe9f7b1883e823d206391"}, "cddc66bf-3755-4727-a02e-61aa52221b90": {"doc_hash": "baa7c41d53f5aa9c8ee70f4a871e355913280771ae6f4c53701cb780fc760796"}, "676ebbd5-7424-4d03-87a9-4b24e99a191b": {"doc_hash": "352acfb6abd363b45d6bd6a7884ea87523bd74c0cf98a351c4063e6bd4f35d97"}, "e9a75e81-75f0-4dc0-8c5e-aee639a1fcad": {"doc_hash": "c6ed9aa7dee59d9c4779e8e01e7ce7d1d8cac64234d35faebe642f065503fd97"}, "a68497c3-64c2-4778-91d1-44215e615185": {"doc_hash": "6557a4d7b300e93af0f671db074832f1a870a0ed5a7d62856d0e9de30136d702"}, "3e8565b2-c9b6-4f81-9fbe-3b02f82fc234": {"doc_hash": "1dd4467e26a968e6c4e57f8e886924d0068b1b8513b392e1cd42580747012ac2"}, "585361d9-185f-4d53-ad7b-ad57c5802c85": {"doc_hash": "f7519cee2fac028d46b6b3bf8dc57b6edeee5ca4c559c8474e461b35490c8fc1"}, "d615ceef-2f4b-4971-84f3-9aeb9c07b69d": {"doc_hash": "a765693a53fe6a6efef9fa5538d3a374d318140bbaa26e7b127d2a5bb2f332e1"}, "753fafbe-fe23-43fb-89c4-b28f937a2626": {"doc_hash": "c96460305ff19d424aae2618bde8032d694d3cd51ab40470e1cedfde583fb548"}, "c58274f9-ba38-4a50-b6a1-68f288fb14e0": {"doc_hash": "d1192130a7bad1e774f3ca063027822f7a42dd4ad568abe1eafc99fab6b6aa2b"}, "36cd84b9-a384-472d-83bd-a5009aecf5bf": {"doc_hash": "8883049c40960dc98e0f31fd68810f45926da8f2ded7cd6b3482d425290d6035"}, "77baf678-09a5-4f6d-907a-5d0289569396": {"doc_hash": "bef0bee13fc199a22803dc7c5b4082befe9ef8575abd31429fe0db8afb845f4e"}, "7f32b640-e9ef-426f-96de-6c53e287fab8": {"doc_hash": "00a4f0376009198ff9bf4bb36771e0ea9298018f9652bd72d36fadef9ac843d5"}, "b74c3f8f-e15b-4e1d-8cf0-c054c3c9e0cf": {"doc_hash": "9ed64dbee8209484ca98ebf7c76f99970f65d6e8fb3ae69b8fc66adc21ca3dea"}, "00c85756-398e-4514-b35d-229ea2e0178b": {"doc_hash": "47d0da05fcf6252435370a9bbce6465a3c15148552d37ea25f33714c397a7cc7"}, "f95ab15d-b4e4-41c8-897d-ed29cb5712d2": {"doc_hash": "7af7f821e6c0d9070c0d2dfffb213f05e0054c6da171a69be09313462a06fd43"}, "ab863388-004f-43ba-a8c8-027f3a904982": {"doc_hash": "ca87903d95186c66e1be5b010d45d185215a6e0994ab7f1281f13342b6f0d718"}, "8c0cd4b0-dcdc-4fff-8fb0-8807bcda1c56": {"doc_hash": "1aafe33ae7cc34bd864fa9b714026d5fc919a6e6af86d3759543d2f3141fee1a"}, "c4398f28-d639-4bbf-a737-f8e1fabf3609": {"doc_hash": "769d418a48e6f7be2ec01c2144a003c7803f8e78d7cd1cd11b99605c0fc20d03"}, "51a580f1-c5be-4fcc-bc48-212752d8424a": {"doc_hash": "cb821a07f58850144d024fdfd1a666e82ff2985394fbbe02c820e1bf7a9cb691"}, "e9e49085-8a8d-4bb9-b113-0abf9c9e505f": {"doc_hash": "8daefa690840b9757b237d213f796be250251fea790521666e2ea1cbed2070bf"}, "502f45bc-e4e1-48bb-9732-56fb3d60e85d": {"doc_hash": "2ef7a4c9de113063c4fb02405b3418b53d5a50e943366dd7c5a355a52c015679"}, "08e7225c-b7f6-429c-84db-af6849a727b7": {"doc_hash": "82eb37179b5f2c44f43bc6a9442406ea6d65e4cf7c0676a3bc1203446cff0319"}, "72d0f21a-ccb6-40ff-badc-13c2e3ea8593": {"doc_hash": "dd221b71c14d0a1fb4922ee86bc9e6577f09b475a9435836b0af10d778c03ccc"}, "0820d5e3-caf3-404b-a1d3-8f65c2099c4f": {"doc_hash": "421b4012ada4b6c66f5403bd5a368e50dd6302ddab23e6c7f133b1cdae2190d7"}, "420c75bb-7740-4da1-a112-c2065658e5be": {"doc_hash": "fe8b40a93bf63f7a87679a205edddfaee7b816d110298d8979071749d7bafb1d"}, "63720f59-3cf7-47b4-95ee-24e8b5e1caae": {"doc_hash": "027de44ff7c98f51507888c22bef6f0ee54b16643b3301fb4eb671b6a7f66766"}, "5449c7a9-b3cd-4b7c-a1c7-a2aa227fbe03": {"doc_hash": "7179370645d8f220d15772357121c08639db976ebd09e2979bd40acc9e880d7e"}, "cb571722-6937-45ae-b819-2eedb2d797ca": {"doc_hash": "05733f27883c40555721b507025332a96c3fccf172c99eba1a3e0ed4bc057b4a"}, "f58188bd-0b82-400b-8891-553261a31bc2": {"doc_hash": "e89095146bd441f32ba0a98f562628f24b90f718e02958991ceec98f86d9d564"}, "91d463a9-fd2c-44e9-bd1b-4d88f8599527": {"doc_hash": "42f417755f0a910ac2b13ce4bb68f43cfbb174267f1229635e8e843c4c0eb202"}, "22cbba2f-b3b7-44a9-bf02-131c2f796290": {"doc_hash": "1ec39ebbe3db4eee72c7b2d404cfe4a670eaadbe6ddb486b065d9cd675fd7672"}, "15165df8-7f27-4dfe-aa4c-f1f714746809": {"doc_hash": "25e08344fe4663255276b0ed970fbe494da4e4f04da2457dc8bf37b742acd208"}, "adbd3cf2-bff3-45ce-a74a-d99627b7e497": {"doc_hash": "bd4dd77f1bac4b0809624967afc724216d65b29d8b354b1199976a12c5ad5536"}, "12d29cff-4ce9-47b1-8fed-4c3f79929306": {"doc_hash": "68599ec4d90a9d59b54a9dcc424eb2f2c5f517b97e97d37335239ffd18d3ed1f"}, "d59f6c63-0c66-4f1c-b76e-090a232c54b8": {"doc_hash": "a4a70a9db04a0456027a09ae5431f35e86a70b81c7f37bb48bec61e5dcaf7c29"}, "885eb6a5-cb49-4570-965d-f6b58e0c0fe2": {"doc_hash": "4f3c9f4db71ad7c83370ba62976f6672f861b5828ea79159ce84e1548aa87968"}, "90cc1b54-f4bd-48e1-8a41-51ca9793e45a": {"doc_hash": "1ec586e15f726b2f10cc8695f075e05d660f45a9db08e4c0d05acac737d620fe"}, "660ee9aa-b5f6-4e85-b3c7-eac50414cf86": {"doc_hash": "b4be66f4800ac26011451656b0487cbdef842a04b9eb222ce48a9ea900198e05"}, "e8cc0203-f572-4d50-8bb9-97d9a246dfae": {"doc_hash": "5c2f16c84ea240330439a5df08ca4dc7d411a2c1b427f3e27e5dd395e3dc9aea"}, "e890f3b4-5613-45cb-82d1-c55b0c04a968": {"doc_hash": "e195274c100b6366977ab5eaafaf11a926c476fa430a0fe20eec3a4bb9cc871e"}, "507d2f32-d2b1-4fcc-b0bd-7b53ffb2970c": {"doc_hash": "475b103454381aac1e9d07a448fd913cedff014266842cc10b1744ea5418165a"}, "6a1e86a9-de6b-4069-8542-120f11210412": {"doc_hash": "9751b4586b0dbb75f258c9fa7824d60c4129ba0d4eeefc97ef029ab2f446d573"}, "60c723ba-fed2-401a-bcf1-62bb55609cee": {"doc_hash": "387def27127782c1662e2b1665089a674ddd285f26588f2497b84ecc92d95cd7"}, "32f6e827-830c-4d6f-987e-c3dc65257bfd": {"doc_hash": "6e0b25205e1adb014a8c944239bde219c6710067a80a1654c99e69df91d8db3b"}, "43977066-e126-4ed7-a320-b760ed17389d": {"doc_hash": "287e83d3f280e4ac76efa3bc07e2416e1fb3706c39fb6401471294907a50552a"}, "e0cc119f-5241-4982-a059-f6f6ad9e4665": {"doc_hash": "159fbc1311f4d58664e7b67541c8ffd46db8c3868681c23c7847eaf740bf4665"}, "5c8e909d-0d38-4262-b732-0c16f4ad2d7f": {"doc_hash": "af2ee4b83760a3a8bd936fe1afa161089f12fd69d866c2569902e354a6faaaa5"}, "02cbb9b8-4acc-4d55-9f29-fea85a947a02": {"doc_hash": "1b0d6a241e86139e06d803db893dd16eb91f58cf809c09ddf8186c86a43cd2fb"}, "a7d05f95-c684-40f8-859a-dc644a2ab29d": {"doc_hash": "b5a6676640797a5ed34a6c86bf38d4bc514c2f00a858d27960ef34e00a0b0e3f"}, "1fbe57bb-23e0-49c6-9362-2d68df7fe784": {"doc_hash": "2e428aaca8c4d29d3ab3a6dfce3bc8ac3f6064d9433f00e054d6d85170d19d87"}, "6cad669e-e920-45b5-8ce2-3917f9cc3691": {"doc_hash": "78bb289df37626a09531a3c424f8aedb9eafcf71a72778346ddae5c59025db7d"}, "74c79f6f-ff44-46b2-bd87-fc295df69cd9": {"doc_hash": "7217a537f8cb58509bbb5934cdd7551491df0c63ed1e38bb2903ea7fa30fa88f"}, "f953407a-08cb-4e59-8048-c6bc3a580953": {"doc_hash": "157ddfb7e0ff8db1d2c3fc4847a4bd7c987f6f8bdbae835510379bfc49c97c14"}, "aa77a454-2c53-4417-a147-ad55d1e5db08": {"doc_hash": "1419942c57d10452e5542bff19a0181f7d992c0df63dd2f97dae80b50b6157bd"}, "ccb80cc6-8a55-410a-b26b-b48cf26bca78": {"doc_hash": "e3801cf5b1fe232235daad9dc5093563b4874f4d5c3802cf8fa51e31cf943b52"}, "eafb5b1e-534f-445e-b4cf-09b6d48fe65e": {"doc_hash": "29820a3b8a1ccc0fd46d804ae0ac3e6be99dabc9f7b58da8507d9878725ee64b"}, "4594f60c-55ef-4da1-9b9b-fe12b1d99028": {"doc_hash": "286b6b3a8eed0a680aabe79da3b74c2602e96b6c140884d3b07c2d9ba81810b7"}, "200ad9b6-5418-4eec-9d82-d8e20e70e402": {"doc_hash": "7ba4666a5aae4a3f3a339011100f448d3286c430ba2fd13f0327da2c66c15983"}, "70260c34-44e4-4545-80ad-50b57dd8f102": {"doc_hash": "780fe42d927b6fde2b0b0d144b57b17c8fbde0477bd893e49539f7dc6e762975"}, "235a6c84-fd2f-43b8-b058-779e43fc9d68": {"doc_hash": "50502d685e679f8c226df8fce50824bac8016b96213161ddf9130cd6c6aac346"}, "058d2500-1a16-41a9-b51f-9dc258ee821f": {"doc_hash": "0f8afd12cf2fb95ef472411d747e5f42d56581b83f9104feb8ab4d1d6de0ff8c"}, "c97853cc-fc84-4045-a112-260b6f167514": {"doc_hash": "793ed447d1334a87445024e96a77b2f673bf7ffec187a8fff9410a34cb41988d"}, "9768d38e-9c7c-498a-ac56-bd3017c60eda": {"doc_hash": "12164958853bda2ae1cf5f64fd0c9e193455647959adb771607f42cbb90a2b78"}, "87969b43-049b-451a-a449-9b23bb7bc72a": {"doc_hash": "6ca7469d41786dc26d7c9e3110209af3f9788e50d2461c5883e2df3176fc25e8"}, "1d6ad802-6cab-453e-af3a-cfe845af50d7": {"doc_hash": "de5cf3643e4072faab13522e2d8a44dc5acbd1ca9da89d46388fe078f6a90d31"}, "148d2db6-3a89-4158-b0ea-690cdc899672": {"doc_hash": "0f1f2d1059996698f404b08308c6ebeb42a2adad10fb8f03e65c9e9e626eb4b1"}, "7b33f86b-fe47-4863-8115-9584903253c0": {"doc_hash": "a4d05a167cd3a5873cbf0642ef35004bf296e7e92ce278f9239533bc4b24b2ae"}, "ed5230b4-63f5-4837-9b0f-04bcbda52e63": {"doc_hash": "763e03044bec4bfe9ae0500ab364628a7e62123031437a03aed73253b5a6a183"}, "fa42baf8-1ae5-418c-855e-a36d463371e1": {"doc_hash": "822a87ace62512286addfb76033e701192a710b9544c5e6b2563e9eddd8297fb"}, "a4fe5449-4f7b-4dbe-999b-3265415d817a": {"doc_hash": "00dc94e1a878c1a300d0e93abfc3bfc581df1d04aac1b5caa3d4caed43707823"}, "f2337909-1244-4aa2-83bf-ef683badee97": {"doc_hash": "097b5ab8e7ec1bf08d206259ded68c7b5eb8e468c076af916770d8f822592317"}, "2800c53a-abf6-4893-8930-42ecdefa6eb2": {"doc_hash": "14791b81ad1e0c793b13e4fb4d592d9b22febb51d373ce13247ac0732851fb37"}, "b79cb07a-468c-41f1-8c6d-e8ba9bdbf4f3": {"doc_hash": "a4a0a72cf512a2f7f7ac6818ffc33b438aae128305fa87b2b687b552d318851e"}, "1ba1020e-d908-42b5-962d-226b103deb22": {"doc_hash": "fea7c84c2db4255d531249b2421b9fdafb752348f274e81adc0d9b1bd38578af"}, "b7e81fbf-cbf2-4ebc-ae83-7bbbd66c18c1": {"doc_hash": "4bbec756e8df8c63ae6f311bdeae8dfff97fa76cb910a324748ed758a70066f1"}, "eebacd36-d1ae-4211-a612-9b0c6e6e8402": {"doc_hash": "3103f4e75cea1ac9241aa4caac2211e79a99517c53037f559a22b83fc9aed29c"}, "62f93347-c3f5-4bcd-a866-7d73c672aafd": {"doc_hash": "db3546ce48001389a8d673cd81f7e2c91306f8ac0e9f4cdba02018539e6ed8b1"}, "f364989d-88f6-49f6-978a-2b06bb3ee521": {"doc_hash": "fc52a7e31151b76776430f4213b351ce41de33156ffc97189ce79448319ef3f4"}, "a83cec2c-741a-43b8-8226-74fb4ee60714": {"doc_hash": "2e6ba3d003b080786f88f02cf6038dd743a863545a55885894607e14a193dbb1"}, "d1af7bbc-e00d-43af-81bc-cca56fe53539": {"doc_hash": "f389544520afd309c26c0f8e2e14cf9b337e125d7f21f7236427b39b53a6dc8a"}, "72045606-e6fa-4e45-8b18-c0e723483269": {"doc_hash": "6726816b1b903a682b0a07ecf205b056f0cd0eaf7688c8a9bb2c7fb4f3227fcb"}, "b960c6e2-d801-4396-b826-6bcf5877c7d6": {"doc_hash": "26817d66cb253b92042f36d7d33edf50072dbc0fa9965c1519d343d2ed49bd23"}, "b6285e2e-fbf5-4430-a77c-4c5ad18a7b82": {"doc_hash": "de0ca65f69830e00ca8aa4576b833ef45b1484f1301fb1112b3e53f10aa4d1fd"}, "2ecc4df7-6d72-427c-8541-3a1740e2db96": {"doc_hash": "38aabf667616472a0004f61248e7872b22d20d7c89f296da75b1afecf6a5c360"}, "386cfdfb-1bcd-4b6d-b434-1651b6271bbe": {"doc_hash": "480daf8cbddb85d85178dabd98512d1ba7c8f455d0e27d11f09b35db18220e1f"}, "8b1ef82c-4171-4c79-b119-18fa8cb38fb6": {"doc_hash": "8a978f18013e01820e64934da34b38bfb4e10181240ebd112a21da4bbcc7788d"}, "084e1766-7ca0-40ea-87f3-c407d18b6188": {"doc_hash": "38b826feb8d41ba748a09c8b09d7ee7eb1172e7b7efa2cf794514587ac68f48a"}, "acd2d6c8-2b2c-421e-901e-7901e2ee9fb1": {"doc_hash": "dffab15e65449b3134e67d5b212d9c4d2a192a766c0cb289fdc80ed8252eb304"}, "44c24618-40b3-4523-b4f6-b06b099f7a98": {"doc_hash": "31f24047dbc683a6915ddcd5428ce28564951abc6b26aa4592aab6ee6c1e1907"}, "982aff09-6e9d-449b-83d7-c176b56ecdb7": {"doc_hash": "9426266f2f1528ae93275665abb35c78ada39db99e927e726d870822b7c8cfc2"}, "e23c03b7-b7df-456b-bde7-bdce4376f15b": {"doc_hash": "dc8ca16f5ad824b0d5adcc862abfb76bf21c61fb71851bd887ff27c86fd8dbac"}, "af2e357f-51be-4f64-8c27-5922ee44a625": {"doc_hash": "9ada5e62aea61470ba81e8aabf447565ca1ce416df5962f6210cc2486beafca2"}, "249c84da-2dcf-43bf-9f08-8d45146acc0d": {"doc_hash": "e7f3de3060a25c9bfe3cc000d5f71094088f2b76f640b641e784d9e6d5b15e85"}, "371ab62e-00d6-498a-b690-1428e8675da5": {"doc_hash": "5e146f39293a8530aa5faf3a4321a72fdad09e0d31e345a097761cf15c203b3f"}, "c4fb3c50-4e4c-4404-add0-a6a906ac1e07": {"doc_hash": "c37b87b9c5ec9a4b02c26ed7758bb70c06128a402b20a893b8361b3be6d6db36"}, "dce95373-dea3-496e-96fb-40302db73c2f": {"doc_hash": "1b61e1ce5b23b9a88708e90dc128cfe23b2485f4c4c211bb961becd812a1ef33"}, "2adf137d-2160-4b72-8c56-a351d0ed5261": {"doc_hash": "2bf2f91c74c563149e1f4c95dc15b6e2b74367bef44e4cabb3a400e4b7284b1c"}, "2f2188a1-6786-4ea4-8264-8caf70c3ecfe": {"doc_hash": "a4f14dd204b7edf944491602fd1e65b5120faac709bb392375eb1b9c640adf75"}, "23cc853e-5902-4f96-ab2b-64cd2b50c23c": {"doc_hash": "905cc41fe43298458ebc270fe175d6d4c9ce0c6527dc2ae3bd3be5514102f5f2"}, "d6876d80-a667-4d9b-9cd4-e1b8f83059aa": {"doc_hash": "fcc78026ff033dd3bb5a2eef241238ebbadf8977c84657e7b54a642472e48a25"}, "4c3bd284-8395-4fbe-9945-3d2235a15ef9": {"doc_hash": "e83bdd022bfc47ec07444e7bbd90ec57ee31f5a7ce06b46caec62ae4792b9a52"}, "c7b518f1-9d5a-450b-93e3-ef139d868681": {"doc_hash": "ce9d2b95c7c8466137ee10d0ed2eb69a130379670b5e94deed5d6c2adc00bee1"}, "e1560ab1-9ac0-442c-8429-1c8bde6cd676": {"doc_hash": "10f392741589c80fe44c396deb73c81879c9808b3cdb344cc3ea38e2457f5948"}, "bb1c2868-95ab-4927-8d1e-0d39f19e92f3": {"doc_hash": "b404d39679821d5c33402e1feaa840c944527ac212b4055d16140fb35550cabd"}, "7c939eca-317c-4258-99cb-5c74a5659821": {"doc_hash": "6a2dcb2ceadb61e7ee6bc2b2c3b17e1a2c1065cfe7c368f6ec64c8e488b03c21"}, "2dd3e5fc-c882-4447-9aa0-c2fd0ed465c2": {"doc_hash": "dae36f57bd3ad147878f49bcae5b596be6999dd5960eb0f995ddfd155d9d9a05"}, "767a1b8a-d0ec-40bc-aafc-23e7c71da3d9": {"doc_hash": "c83d34c3ca242366c4a67d0747c73f01e35c521ea08ceef82f6f95a2db3b43a7"}, "205cb9a7-19c5-4edf-9234-630f474f42f8": {"doc_hash": "81f19a3b976642a52faa3d75ae47d270d48e222e46a77896be5ddbb49b9970d7"}, "6d2f1656-b98a-42ee-acda-300ab8a0f2b7": {"doc_hash": "792cab8ef16de1b80e59bda8bc65168f828c87698e905b854b6ccc7130166b15"}, "01f5f8e2-1f2e-47df-9cb8-c10a5f7be7fd": {"doc_hash": "a0643812f7d9e0a6d276621b6b3970942e2472b76146172d2e623908531e6e96"}, "275c3805-a2b5-45fa-9e53-ceeedb461dbb": {"doc_hash": "e2fd760c417fccf25788bdfa8f3f7f29b26cf3dcbea29dec4e46fe9df4e72017"}, "2ac14eb3-fd15-4040-8bc9-8b361ba5f49c": {"doc_hash": "665de226cea1faaf6c7b0dc4ec92ad73da6ec9b907208c1beacb7880e42b89a9"}, "0d6633dd-c16d-4905-b269-2740811a85b6": {"doc_hash": "497c0acc382b82448e27417ed351203efd6f9990f2311477aa74f5360b3c83ab"}, "b4344d7c-1af4-4822-8ff6-d377692f14fd": {"doc_hash": "63d67022f17313323833fff127f0086f90fdf6333333095fd7c2c0451ca60fc0"}, "dc96d952-3b21-4860-883f-572edde32940": {"doc_hash": "50a010d903f23da52b8e529b69211c312456357dfa9ddf19fa18a7d5b5c820b8"}, "7bc3e66c-aa18-492a-89aa-b809432dd3fe": {"doc_hash": "b39ba9fbe551cdbf967f2ac4b6eafdeae1429b95a2a8570d832e082e82ac5f10"}, "8a2ad419-0210-4b79-8bc2-1a0113009712": {"doc_hash": "bd957cf34687195f22eb184471aeed342b000ff321c1bf1ca20c697197e902ef"}, "5142cbcf-672a-4792-90f4-2bc3b1344651": {"doc_hash": "7fe8bc453f972df5ab0600d18eeb804d5579da2b087eabd57bf284d5e2f5bc0c"}, "a26ecffd-a8c4-42ec-b47d-7988ecf68516": {"doc_hash": "713a969beeca4293199dd03ae96194d1a93b46eedc4ae293142ceee2a8ea6c09"}, "abdb1f43-a212-424a-8bd4-5f74f15b0a1f": {"doc_hash": "0369aa824ef9a23b38210b23c62ebd57ecbedd215a4dac2b53aba5478edf47b5"}, "5f9fba4b-72aa-40d6-8206-36f011a41efb": {"doc_hash": "b34f9c2b774c1a3b0f68e49c4005feea53d80bb082e12bbfa638db3fc63908fc"}, "3878b1fb-4eff-48d2-8652-bb6456f9c205": {"doc_hash": "8d4d25f75dd66c1bcf3787705b6b855d27b188e7b7034a815c964fa2f5233ab4"}, "5e664123-9dd0-48f2-af91-a6c5daf90610": {"doc_hash": "b5232685560244945c0c4c01b957423f924f225b620bdc2a301ebd36f8cc8749"}, "70b3d11f-00fe-4050-85fc-cec9d32da8ea": {"doc_hash": "7e88bc4db0b16e7cac7d636cb67308f88be79d48b2eda2b0932d29b8fad391d1"}, "68def7e2-8124-4bf0-8426-c49bc63af5e7": {"doc_hash": "7e0329b9c0d288d4202ca88fd8235db51d9e90d937cdfce71e973589ea683b50"}, "eb9b478d-379b-48b2-a1be-2cb1d0004acb": {"doc_hash": "87a2657dcfd30f51f334eaabf7eeaad087994f6fd1db7e31e7b4b63056c6951a"}, "f40b78f9-b94e-4774-841d-77479410c0eb": {"doc_hash": "13001c4a3e7e1cf21f8cb07a659469e7ec6ff4e2122eb19fc5ce327723fd8884"}, "9e6acf41-80f0-4426-a035-6050fc4efdc9": {"doc_hash": "71fb1aa087a3ea5db15be6f0705c2ff912726efc5daa37d450924680930f5d16"}, "3091e2fa-cdca-420f-b1e8-bdb8b7d72eda": {"doc_hash": "ac80b8e271c26867b730400b608b784fd528f3cda7dc9eb4c366475c97812e09"}, "33d8918f-b5e4-4267-b4e4-8175517a4814": {"doc_hash": "ed3747d8172b67d41f68525a8b7bea6dd004c4bdf800897a8b51481f2f15c47e"}, "d903a57b-ee67-4ff5-a3ea-ca7ea22050bb": {"doc_hash": "70ff3cec07aa61ce2358f92f99fd74fd49bbf6bc87fd56bb9e3ac0f5f30538e5"}, "4e3553bb-af59-4673-a6b8-5cc60094e499": {"doc_hash": "b1dd63eeb0b24bc553e9a6253bfa67f5bd8ee09cfe6c94b0ee7c4aed79961a8e"}, "45b0cfb4-07b8-4921-8293-f89216802a9e": {"doc_hash": "8b60bfa57e565f55080040170d3ec823b8de3a15cabceb5db804ca8ff7f01827"}, "1c89d447-dd35-4074-b784-c20a07678a10": {"doc_hash": "7d7c055642a5760de705674f5bd1bb1b85f8710d557ee0e36d62ed6be0214f1b"}, "ec29f24e-5c62-4dfc-8755-bfa9d3ba886e": {"doc_hash": "e965a863002100c49408a19245688f94cbb54f26f97aaa4e684544fed67d49a1"}, "442f52e4-6725-41bd-822a-ebda60722cd4": {"doc_hash": "73cbc64f49251158b3697eecf002e96c51968b40f9b3b453bd03c40b51a69975"}, "d5cb8778-a09c-4a43-ba05-588042fbe0a3": {"doc_hash": "50051372e63d7c19ed77d28810e9fe43b3b4f64a7f498281576cc7651c0b1c50"}, "e9a712eb-6ee9-49d0-8626-92545a16df90": {"doc_hash": "bc3490d522dcca698ad1d9ca50a1a8ee6a5f570e41a4127d742f99fc90720c19"}, "516cec03-856f-4324-92db-05dfe7624163": {"doc_hash": "2cda76a3dac65a693fa3ee689f75f401b6a7e0dc2e9ca973df4bcea116c03b24"}, "e8c377f3-8948-4388-99a3-d02ffdd4edc8": {"doc_hash": "423910b1b7f1262cc7a49d86b2648f43abcbba2a8201710d3267a90fa6fb192a"}, "4ed55078-1df2-4b03-8507-3cf2d919d7f6": {"doc_hash": "0a0993ab53aff258ac8179dff486b35eecfbac9a6e6a157cd2d3694db5e8f935"}, "02683cdf-83f2-4d90-820c-7e5afe0e45da": {"doc_hash": "b0b3368aaf5dfd850309366069e9431673d405d053a2c86ac29cc5d520f4255c"}, "911c4817-72fb-47d5-85f9-52976b3af99b": {"doc_hash": "3905b57d8255f45f11ff58989ea2ec7f547c282a3e75ba5f6d0de56cf9179290"}, "d157a39d-bfe2-42cd-b03e-94eb3da17585": {"doc_hash": "f80f98d7770318edd948882270eab329d88d4024d0b08bd2adbb8aadb2847445"}, "2a5c9090-68f7-429c-a843-e03b123a694a": {"doc_hash": "d8f563fc9d2f176824df3ca206195df64a85cbaf6e808c1afe7d6871dce8dfbc"}, "c77c752e-ecda-4b56-a703-e0a9b26b9610": {"doc_hash": "5e4dc35a43bbcaca10dad453efb667cac6704ab2b848fe7ee9f8d40adb4dc783"}, "1c581b1b-e52c-4e23-a083-eef141191e06": {"doc_hash": "eeab3685a801c18ff964f90700acb404275072c0ad9cedd0a8d6a4107f5751d8"}, "30852d49-caf9-4ac3-aeea-c3b26137b885": {"doc_hash": "9cd09d9d06e2872c60e71474990b6ddf38211ddbbc89f850265a686aeabc7020"}, "a9b36b88-f1ef-42ec-95c2-73605b824ca3": {"doc_hash": "8a0c8afb090c431641153fa98bd6d2dde9b43d299299b76c014075284ef0a98e"}, "649e3f70-4fb3-4a86-9d1d-050a2b9e3539": {"doc_hash": "8c6845ec683d82986f449d74c1c9940b526e160d15ff41adbae6dce64182644b"}, "38e4aff7-eb47-4788-8cc0-6fa17bdbb7f8": {"doc_hash": "d8d79a4c5e71ce2e6a37f5ab72275e44163b84b2a1ba085afd95a9f038f28ab4"}, "203fa610-45d8-44b4-9494-a95695790a68": {"doc_hash": "14904f5ca083d6691e9378ccc8b25cde77d0e437edc53cbc5564bab430e78c33"}, "8de69e31-7926-49e8-9ee0-21b42e632f57": {"doc_hash": "b2a095d23177bc12281c90525fac906aba5769f0a188ab2676f1da08e07be2d6"}, "69001c19-cdbb-48c5-91d5-960991512791": {"doc_hash": "dcb271d29ca3e83e999e2b044a18ffa49b4b89eede71f8130ea40c6104d57497"}, "8570d3d0-adf2-40f8-b7bf-cd50eab51139": {"doc_hash": "f8fdaeebe051e6775390008d5fe76eac36c5be9bd917b25e4e423971e66967b3"}, "dc74b21b-f5eb-4e9b-ae19-76e99d2f63da": {"doc_hash": "0a6f17bca20643ea852d8d289aecdd0495dc4edf4cd984456d175c81f89cf8fe"}, "f1a6e385-1887-41e1-808d-b333e60d0f2e": {"doc_hash": "7a7b6e5157fa955f353664d0a416bc1e66c2cad663784896849c1e69b78cb631"}, "7f3fdc35-bfb2-4491-a3cf-9637ed19b215": {"doc_hash": "8b6be35b9b13b7fef43b0c2839b22c828b6665575f84babfc3f0bfc209dcfb99"}, "8baff44d-944e-4e85-b9df-618e0a55d396": {"doc_hash": "3c72fdce198bf6b7d808781dae25a31d666efbad309bb4879afa8ad04756564a"}, "965eac7a-2f52-4f49-a08a-5bc4d2a0089e": {"doc_hash": "edb938724d1910efff3ff74a98d5ceea15c90f53716a3fa2e37e6b45a3b25c22"}, "8dc32287-c4ef-4821-bc7d-a578ddb160d0": {"doc_hash": "fdc2b46a3a7943989d2effebf66a950b6f9dc1c634881be0333481733cc9b81a"}, "9f2c2cba-3177-44af-ba2f-56ceca941746": {"doc_hash": "3366ee50a894944c95796c220ad96720a2d90d051e13732de986ee2d2383d28d"}, "60bf2fe4-7c0d-4369-b00c-713ab442f52e": {"doc_hash": "1240c809043f75b44b0a03b92ee826f959162327b5117129213b698ae3240098"}, "97d474b4-12f5-490d-bc74-6a61071b595e": {"doc_hash": "88309044bcda790864d4d385839ecf6dbe136cb7be83ab98695ab863d5dd96ed"}, "a3107bba-7963-481b-9eb6-96d7fc45d10f": {"doc_hash": "266f3f527695293bfbfe54638be68975c442347c7be1094db0f5f057a1ec25c6"}, "73b936e1-993e-4dcc-850e-d739c6459dfb": {"doc_hash": "6c238854ec8ca118dd380518f740b297131d3e8e032c79be697f4b54b3706db2"}, "11a8b2ea-3717-40f0-8e7a-6f0e68e520c1": {"doc_hash": "4fe6c12676ea4c42ec566a832bdfb4be556c11401e223327aef593369e474e6a"}, "5e183b2c-b341-4b66-8e17-7c9523bea423": {"doc_hash": "2d11d973307a04de56cae1bda7b754adcd1506d9cc3eb87c99c1d34840d742b7"}, "ead739f4-fc9e-41c5-8b63-b63b79e218b8": {"doc_hash": "c02549ba138c17090d8c001c6866568cc7d71a13309f4d11347d158eaf3e2a56"}, "09a020f7-4ede-4c80-b4a4-3462a8c32a69": {"doc_hash": "4c0521d6bc751e5adc701eda1bdc5739c41ca47e726ada0ecbabdf8c4d837eba"}, "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2": {"doc_hash": "c71255a7a2a792f4478d3c292b603414a446b2121d7e40d5b641180867d34b63"}, "d0f9e178-9328-44c9-a9c5-d30173afcb80": {"doc_hash": "0e922b167195c7da459765a92c53bca4a8b7c0c14f303fbbae8f9de47f09d2b5"}, "8a83a624-cbd9-4e9a-8275-e8d1cdc2504d": {"doc_hash": "0a7d4f967ea7ed6130260798dd0608c6ca36e777a9fddb94eff56c89f7573f17"}, "4ed417ee-24dc-4f43-9f4b-ddd540aa3c62": {"doc_hash": "a4ad1134e2c238e84c3fb0c8572983785fffd4633384e274f8b704f5e3b0334d"}, "f8601b34-a3f6-4aac-b2b7-bd0e28d39e2e": {"doc_hash": "aca9b84ba1fb3c417027e3e2d5640670b63a83a2033313a622ab648edd6045fb"}, "81d3317f-c85a-4438-870b-7fd6499f20be": {"doc_hash": "4fff769a6dcbca255ed5248fb3ab14ec0c31c300d2734832e7a57046818695bd"}, "71885c22-edfa-4cab-a0b8-8ca79125148b": {"doc_hash": "ad62f57dd64622b8c786efc1dc4505770de341eb0f9ffe922fec25d235c00d23"}, "d8a8e289-624d-40ed-ad2e-2f21a7800aab": {"doc_hash": "3b76f838a0e59d81e376cfdb3dc04748e1db39c7cf34256b64e9433006ffea25"}, "8e48d117-71ed-491a-9987-271177f52f8c": {"doc_hash": "ac2e1b6ce48d5a8bec1aac243e0a3a20364301454a6425808a64e4dbb131163e"}, "5a9f3b43-5472-4a23-9b0a-865bbc49e593": {"doc_hash": "50a7a107dddfa3af40b6eff5538c3295cdd0643a8c43d7a56549d12ef0171d4e"}, "a32df565-ff56-472b-b469-3a66cf2346e7": {"doc_hash": "7c42c9bf37d0ddc208fd055fdfa314d044d6110d4f8d0dd0e223153da84cf587"}, "49b3803d-41d4-4a6a-ae18-6123bae2d7c1": {"doc_hash": "62181cd7b78e10db72df69b34caef4d1b9303b612744df94810434745d6326da"}, "ceff711f-6c7e-4eaa-b6ca-a819d9d42274": {"doc_hash": "01e2c60903b31230ebeaec1527b40eaf18c24a9c3f2e18b990ac3bcfce5356e2"}, "8b8fab11-bb3d-4846-b0d5-df95bbf64188": {"doc_hash": "c0e4392723e39b4690059b981e0819a318647db772de27317c1236d83f54d3ce"}, "3a37a87e-e2a6-4e52-bfae-fad329b62253": {"doc_hash": "7b85856f8a9f783e086f163694c56c92be1a8ff83ed666d09dd02faa335646a9"}, "fd7a66a7-b736-4c0c-96fc-8fcb3f4e8daa": {"doc_hash": "855cda693266fe50860395eb07a741cddf7563cda613c9a2efa3e1f4df9f2b3e"}, "a1cc418a-9dec-4010-af6d-682770c36972": {"doc_hash": "d07cfe19d6464c799b89047c3a89b69bf1c9ab259f9ce16cebea3cae89f585e9"}, "fccb57dc-9085-4279-a6f6-fc4bc935357e": {"doc_hash": "31de11635c7d6f77443bf0aa7906db12dc297d5fa2cda7ed9c0cd661c5d7e689"}, "069d7ba2-5195-4fcf-b1d8-4ca6a67dc6be": {"doc_hash": "3331991980de8e1643c030d4e177f2db0d82d5e1cf476829414f01ce2955601a"}, "d38fe9e3-d538-44a8-9999-16d53fe55bba": {"doc_hash": "01c7b9af98e71d48ebf7acc13ad06e02c8f45d851f67ac77e5413c84ff8452e2"}, "34a461ca-98da-4bea-8f7f-b698d088db92": {"doc_hash": "ffee0351f9ad1a71448cc05f4d616d6cf09adca9e69f7321ce5ab66ced058112"}, "dd9dea52-6cd7-4317-8b98-e66d85735fb3": {"doc_hash": "fd152f131ddaf7c1a525e658514d13f0f6652608bc6aef33673c83d2f2cc6d33"}, "b17daa08-698e-4c9f-98f8-d0bafa4a7a25": {"doc_hash": "543d431fa6dca3380ecff0f2119c621c52ec37b061422adc026280f27342dced"}, "84ad9b7c-062b-4ad8-bacb-2d06649e5c43": {"doc_hash": "a961755eb43b529c912c3fe7d23263b72dda8c7e496a881ade3dec6aea8e8a4e"}, "55b00d03-f9db-4c38-b831-fdaad4382d05": {"doc_hash": "451aa387433b3eba469728b7243a984572c1c74893c20b849436a8874e6b9de7"}, "e9744735-0bb2-44ca-b9be-86b6b83eb40f": {"doc_hash": "29b4510643cd832a2fcfb1803a33550a0f462c94e63ab6302e3135bb4186b4ab"}, "b41a6341-0c2f-4240-8ff1-cc663ea4c3da": {"doc_hash": "d5ce9196b03f9997cd49897a5797c29f1bc5117acec34800c95c8deabdcbb412"}, "1421d3f5-72fd-4fbd-81bf-586ed9e01170": {"doc_hash": "9abd676e81fe85f78e240e677bdab747963f8398e32132109236ab3219bc3cb5"}, "bafdfb25-dd1a-4683-8fe6-46b06260fb6c": {"doc_hash": "0eaa5a0c1cd48b6b643376f8cb0333f2f007402bb4cccebfabf33f1c9105af00"}, "0d967f1b-e3d1-40d3-8e43-2f50fc2fa911": {"doc_hash": "e391ebaf1a0442125288d52baae34d8c1a92d2d9154d3caf39c655fbf0f393d2"}, "1b9b7e67-e900-4c2e-9ad4-e3d64ae07978": {"doc_hash": "52a67fc0289d67c438a1641a45431c25a8f84c47c5787d3de70b6a00ca231388"}, "680ac102-b303-47a7-859a-575a2f5a7768": {"doc_hash": "a8e1e44fca621d9800f799a15e73c8d54b67bdedad6c40b5ed6ce631b6268eae"}, "b5927433-e281-45c8-a0b6-322d8fc8d12a": {"doc_hash": "b33421be06c94b8578c4e17fa6a4d9f277210946d3861c9ff1fb7e5c79a8be64"}, "98f8ceeb-74d4-481d-8873-77630fbc6e2c": {"doc_hash": "e56ea4b0aa751c78619c850a90455fe540d61ba130e82e9b964b6a16c06cf098"}, "9cde8e41-afa4-41e8-94c8-9a08dd63ed98": {"doc_hash": "dc3ddbe20bf254b178cdd71e3a064e5a4bc68ed4a00102c00747d011620b639f"}, "22241a1b-1dd7-443e-b4fd-01deb167b9bf": {"doc_hash": "b90450e0c8e6b33d84b6fe0edcbfd1dfc325178429508a175705c6679801ed59"}, "cae4b22a-3da0-4e1c-a38d-5af09b1767c4": {"doc_hash": "2ff1e6f30d7abfdb9a129e49eb1ae142ca973616e57fe99b4d5946daf30ea0a5"}, "81187f97-2f18-4c89-b4f4-71dc5e4626f4": {"doc_hash": "3830919fb56b711f29f41ff5ec5839ce942e355fe6f06013ed813f0c3b1a67f9"}, "5d555947-5187-483d-b39d-4e7196a9a0b7": {"doc_hash": "1031ccb663f9dba89392feff83e0e85fefac4fefdfa2080b96700a3a15f79a29"}, "0a79dbc9-ae9a-409d-94c1-3e2e2815242e": {"doc_hash": "a45510e95b5c28e926e5c3dc4b5409633996d3079769a52d255b42d8214f78bc"}, "01d004c6-72bb-40c1-9027-cba6150771ef": {"doc_hash": "821dc21571628071cd5e70e2e6f836792a6e1c6bf8035e521a4f0365c8bbbfba"}, "fc632f57-8a8b-493b-8dd6-51a9ee0531d0": {"doc_hash": "84bb3cf368824fc4746719e032aea87462f57ab1508b3492153f5fbb41db6812"}, "7e4efd93-738d-4d08-9d15-e21f4da4024f": {"doc_hash": "5f79c1904490c50e3ad32eac22a560dba13150aae392afb0aed8c05ef04f3c8c"}, "aa65c548-98e0-46b0-8b51-41cf140cb22a": {"doc_hash": "ea8685fe1128abcb81561ffa9d5de69288ef8227d2b41398b292e272230914f4"}, "a18406e6-031a-4eea-a622-1a8c68635e53": {"doc_hash": "ad3b4ea490255b6ab77f1dda366485313ee43b5748088e982a0873542e89c02d"}, "0d0a39f3-3807-4b99-b75a-cc60dbb5c532": {"doc_hash": "a61fec86df93ba34ec7cd0fd3daa2796a3026e16f90cddfa1e431c56dcf79188"}, "3bfce97d-2793-43cc-ac33-1c2186c9ce90": {"doc_hash": "532d385265c999ba225fda5e718e818bfd5ba03d7a29eb2c04987d11a5fd5d5e"}, "85c118a5-fda0-4a6e-9e1e-f91a24b1b343": {"doc_hash": "d150efc9f043c29d3bd1152a566103224179aa208e93cae6f858fa3dcda7e181"}, "78f99c44-9df4-4d1b-b300-0a6097b616e0": {"doc_hash": "47afdbf320a0d1453e7effe787a1d8e3e452bfd4a8cedd7824df60e17eb64b44"}, "20d6ea59-895c-4346-8f32-1287c7edd597": {"doc_hash": "c4aa21a9eecbdb0f644e4e662628180e5ef863df73b2d78e94130003f6b37de6"}, "0986dfa3-cb0e-4a25-8dde-060477424f7d": {"doc_hash": "4e854316dc9e6d651e6c2a3bf94baceaea01f2b7ce379d491adac598351aa7a8"}, "ee84bfc9-298e-4888-a90c-56f414080368": {"doc_hash": "76c7666644d6b60638fa74f2471b4803ecc856682f34f6b5899167cb93225c1b"}, "d614e1af-3b7a-40b6-a458-6caff78059c5": {"doc_hash": "aafc9d77b6a7359e806d957b634c590656825ce55b74909841f46a797bf0ae15"}, "cf462911-593f-43c8-8d16-eefecd7573a4": {"doc_hash": "fff35c5e0e8cf30b7f77ede20c0002e10d5b7f3285cde3db0366f87d03162652"}, "4d70853d-8305-4aab-9b57-d4f225d2ff3c": {"doc_hash": "6a779ad4c16a8b6c08a4bae8b70f0257c00ad37ccd1e71a3220f0cf67dc694f2"}, "613fdbe9-48fa-41f7-ad2b-1ec746c3b5f2": {"doc_hash": "6a1a7e4133a561881ee7e3ab47d120403fe379323c916897c76a42f31736d39d"}, "8c415403-83cb-46a0-9100-adb46a5cefe8": {"doc_hash": "71acbbc80c3c45920dbada71f5d1ec74c5548f70b7e1146fd8780927e7591a93"}, "de12d501-d31f-4061-b714-9998c95b4347": {"doc_hash": "b00c54845a6835f21c1bc2ce5d95a4cb73d3fbd7f98f7d797fb7de9e2b4140c3"}, "4fe71221-fba0-414f-a43d-b6963c49b21b": {"doc_hash": "13b14d1e49ad379f3c5d175375d8630ec50d1093c4bf8067ee55526aa98482a3"}, "0d9e2ccd-9f8c-4af7-ad50-61e64905b415": {"doc_hash": "b4592ded6fb7fc3017959636de5b58066af16dfecbf3f1b77e5e81bf59d7f2aa"}, "b16e0e6e-df64-4dbf-b2f3-618029aa7cf3": {"doc_hash": "65275cf4a4c9871f201e433b65d3f269e42b4b012a971bec96c25cf5a46ccb91"}, "b7ab3ceb-563c-4913-9464-4179fe848687": {"doc_hash": "b5c380fe30db9a2c506783dc1591b43728a08f22b1ec1f6c5c766175d9b55be4"}, "7408c28e-615f-4601-8770-be762f23a934": {"doc_hash": "999ea5022b5f25807babcba08c1c7771498d410083f054819b07c305dc291329"}, "fa224d56-8f1d-40c3-a7ee-63f70e65b5d8": {"doc_hash": "62b27a7909f3192b4ed653bedf0174749b8740980d350688b6e4c66083315fb8"}, "77a812ff-dd68-4700-afc9-5e591bcc95d8": {"doc_hash": "f563456603f3373aafb0e08a0658d4a3b4ed54e6894c8aa1e2ffc85ae93b09c3"}, "24b0d051-5e56-4af0-b663-04178fd008aa": {"doc_hash": "8a725b605d427ab5d8aec25c719ea84b3db29116eb603a448d40a69e4ac410d1"}, "a026c818-cec2-4271-a184-538f202b1587": {"doc_hash": "bea2b1b016de51b372debb2d015e02923a25328d9f746d5db71f44eafe463bc4"}, "7722b446-8976-43f2-91f5-30fe6c14a7cb": {"doc_hash": "43e1cc29ba2665961b0c26fe6d815de97e5fe18f0afc3f59aa9f518c5e2f11d8"}, "50c71383-445f-476a-9e13-313051bb71f6": {"doc_hash": "15e1cd2f04aab33e3861e83fc380b7e75464dee92b58625be8761969662a2b37"}, "7e76d3e2-ec80-47c6-b548-8057b2f7a0d1": {"doc_hash": "f94389efbba0037f568da38b3ea4991ef769401532123725406391265c07c1d5"}, "e06707f3-429c-4756-9acf-009249f34c31": {"doc_hash": "d0961b32e560e1a37237ede869c0dbd01840facbea71bb1b17d5cd2dd678d573"}, "293fb481-66fd-43a0-a9b1-239ccef84484": {"doc_hash": "5f3fcfba4a019cec903d605b7f96d29bc81a2b1d64cd46da607707510ee32430"}, "93148f7d-ab81-4775-9ecd-fe878379d8e0": {"doc_hash": "57b15aff92a378cd345700f4d845d05e0482935441a5ffb08424e7f79e4ae541"}, "b4f2862f-a9ad-4c94-8737-2e7a049d87bc": {"doc_hash": "5511cb82b1ba666cfef8b0bd2a46b3d6e89c2b7057010cd363bb02a1baeeeb76"}, "84658b36-c79b-4469-ac90-00490d4aa9be": {"doc_hash": "c71c9b6f78166678b5a3dec31e007d54ebd6402ccd376d8855ea4c8f0599a9a0"}, "d10ffb11-6f31-4e99-a55f-cfae9cf20e92": {"doc_hash": "b3e21b0bc0938fbbe59805385091fd9e272e04a9fd63498a0e49dc92f521a14e"}, "9c058290-79b4-44af-b517-d4454d585c7a": {"doc_hash": "d0e9e855289b5e9c3598ffb837b72c1da60a56d0de50947254a7953fb6fbcaea"}, "928a1d11-0935-401b-bdb1-58fb2fc1ef99": {"doc_hash": "e76168da3870ba9ae9324792e115a78acc38cb77fb2378ccffc7ffb939e8f973"}, "34d53bdf-a177-43b0-9b0a-582685b6d51e": {"doc_hash": "23a14f15b4795c312cc450d159bdc777b7cbbe8f861116896acda3d35ba888c0"}, "50d1950c-cc88-4265-94e0-7cfc604577a1": {"doc_hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066"}, "d2e509ab-4d49-4c7d-902e-0cd5579d42db": {"doc_hash": "18a53bb72eca73c6378167be729ec75a3025f7fd68b8d21ccc9bb501b79ad949", "ref_doc_id": "55405485-42c0-436f-b31c-3a0aafe29f33"}, "1048070c-750f-46b1-8c77-653c1e8bf307": {"doc_hash": "92b400f362dc31e38786954fe3394c1c2a6db6f7a841deb25c21d490be49402c", "ref_doc_id": "c2164602-45b9-4aad-8d2e-3c2fa8d73647"}, "ad879b28-1d5e-4062-aaae-0301cf15d6fa": {"doc_hash": "8dbc7d7fc4810a350bebd6dac5705b7dd0f38c3239ddc478173e0ab892d19790", "ref_doc_id": "cb376bbf-00da-45c1-ad22-e9da3190b470"}, "a8809711-309e-4672-b940-44c8e2716efd": {"doc_hash": "052c1e7938a60a73f2aee73d0033dc11964d01f98e42c5c3f2444aad23af13f1", "ref_doc_id": "75499e0b-f963-4ee5-b3f9-2bc40101d3e2"}, "2c1991a3-1a31-4e59-810b-013cc5c984cb": {"doc_hash": "ab8245e1ddf02f16baeab33289e4d4106057223a035e325c0f9a54dcd92e62c1", "ref_doc_id": "f09dda05-763b-4f40-9047-da306c58a828"}, "d1fd9238-a103-4c5a-bca2-b4fa0f2d6b59": {"doc_hash": "b98cb63b349df442aaa531e1129ddfcdf38e914cc917b0e6045dab828272fe6b", "ref_doc_id": "2956f9de-5058-46dc-98b1-87fb1f14512f"}, "dd0917a0-7eb7-44e2-b484-52900d3cee15": {"doc_hash": "a56e7876b2532183e21ff00e2ecd8e69d4f42078ea0d7bae81d9a39778a023e2", "ref_doc_id": "044b361e-9c5e-4bfb-9543-91420862c382"}, "02aea1ac-3ade-4251-8772-816d8f812e46": {"doc_hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "ref_doc_id": "526ee412-22f6-42ff-8e69-01cc4d9fe0d8"}, "1c473438-4758-4314-a28f-e75b07c9d790": {"doc_hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "ref_doc_id": "03dbd0f1-3bf3-47f3-a603-07fed9856cbf"}, "895c3402-30a2-4b1f-8398-c4d8f3a152c0": {"doc_hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "ref_doc_id": "b379edd3-aa54-4f7f-b203-4275d6e084be"}, "8fedda13-845a-40df-b698-350443926c6c": {"doc_hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "ref_doc_id": "7b2fe83b-b9b5-486e-8cfe-d8b0779ceb54"}, "dea85efb-9113-43b1-9c54-f0fe32af8c8d": {"doc_hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "ref_doc_id": "0a54e6df-ad0a-41d5-bb73-b899c6c66552"}, "fc12489c-6756-4645-ab7e-a81be33d282d": {"doc_hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "ref_doc_id": "82782577-f92e-48ff-91a0-1df9646a035d"}, "68258680-03fe-47da-b09d-68a1edc046dd": {"doc_hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "ref_doc_id": "9db166f4-1576-4cd0-a107-021ab5c6f079"}, "0b969a3c-509b-4307-b7fe-4648820a3dfc": {"doc_hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "ref_doc_id": "282b2871-1166-4e41-8a04-4fa2250ce637"}, "f9673153-8629-40a7-b6e5-7b4741532922": {"doc_hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "ref_doc_id": "c76101c0-b876-449a-be5e-7cd9f00e80e7"}, "16adcce3-4846-45d7-b91b-9d1d3af3de44": {"doc_hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "ref_doc_id": "9a703c34-2fba-409a-9ae7-0c5815de1961"}, "aa3c2af8-5e4e-44bf-9e5b-ac1168239fd9": {"doc_hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "ref_doc_id": "62dd6b8c-5140-410b-99ec-9d15fcbc2edb"}, "8bf70482-1930-4dd8-b650-41b748306d66": {"doc_hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "ref_doc_id": "a437b402-f243-4124-9fcd-530b50751fcc"}, "74e8937f-322b-409d-8b07-c8ec78f6afa1": {"doc_hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "ref_doc_id": "e3f136b6-1dc1-47ab-b113-f043df0d3824"}, "d9b02c50-f6c0-4527-beec-e1d66ccd8552": {"doc_hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "ref_doc_id": "8079e14f-c345-427e-acf6-eb64636f9815"}, "c2da3266-5c1b-42fd-8a52-457ec8a837b4": {"doc_hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "ref_doc_id": "b8c66548-3a62-454a-acea-7d6c4917ab05"}, "8025dec0-95fd-4190-9f30-c10efdc9d9ab": {"doc_hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "ref_doc_id": "9eec48a3-60d7-4a50-8c2f-8b13630b4719"}, "f057ab81-123d-48b8-b7ca-62bd53dfe7dd": {"doc_hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "ref_doc_id": "79d60502-3ff4-46a1-b0ae-5a5afab313a5"}, "e9b5f9b6-2e57-4c74-b1ac-b8bdba8473f2": {"doc_hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "ref_doc_id": "66a2ddc4-9769-47b4-bd0d-957df08f070f"}, "0b116a34-f8e7-41a4-9df6-969f12cb8101": {"doc_hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "ref_doc_id": "4f42bef6-99d6-4595-bb9f-3f59c797eeed"}, "4cbaf0d2-e3ad-4a5d-a006-ad7d5a208e25": {"doc_hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "ref_doc_id": "a6b1a559-6520-45e1-a06c-4b37fe41b69e"}, "5252e464-9219-46a2-a24d-69a7c319d3ec": {"doc_hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "ref_doc_id": "60d7ca39-eb78-49a5-a2f8-69097af5681a"}, "729a1f7e-103d-4470-9421-6d7ac320bb8e": {"doc_hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "ref_doc_id": "4d0f7d40-d879-4298-972c-7744cd33bc9e"}, "9c30a655-197a-4687-9381-75408bdbb341": {"doc_hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "ref_doc_id": "ea6f5752-1f4a-418d-b87e-94bfdcab903b"}, "e4542bbc-a975-4a79-8766-7b1e928541de": {"doc_hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "ref_doc_id": "d96a246a-69bb-45ed-bf1a-fb7817cb55cf"}, "b37be0aa-3ddf-4bd1-9623-800f82da6cf6": {"doc_hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "ref_doc_id": "0db8be65-42a7-42bd-9267-2b36cab4b735"}, "b1028ab9-411a-4c80-9410-056ad2a89253": {"doc_hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "ref_doc_id": "5e43b865-f498-4d60-b103-c88caed0c66e"}, "65b60eb6-7f01-48c2-baf3-04777d9b92ba": {"doc_hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "ref_doc_id": "8a9ca8fc-48da-4eaf-bf0a-f70ec9b8d176"}, "fd6adeee-e4df-4a45-bbef-15a1ad7488e8": {"doc_hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "ref_doc_id": "1337696a-6c5b-44d3-80c4-90c9bb4cfdc9"}, "390e51ad-8c80-4321-a564-28b0873250fa": {"doc_hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "ref_doc_id": "4f13e2c4-7e36-46bb-a420-d500d9328996"}, "b6dbdac6-f645-48ea-ae40-dde01ed5eb71": {"doc_hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "ref_doc_id": "95078f9a-9ca7-424e-b462-1a2d831a0edb"}, "fcc1ec03-0215-464e-8f07-d015c6be9c28": {"doc_hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "ref_doc_id": "1369b4d2-63bf-4a29-ba32-8bad2d08ef21"}, "91162427-49f8-4a22-a05e-507566eb829a": {"doc_hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "ref_doc_id": "2b194c57-db06-4ce2-86ca-31f52d494b63"}, "49186d12-b3f2-44a9-b22f-344cd07a1f2e": {"doc_hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "ref_doc_id": "28c147a8-5b06-443d-8194-8bdc7d760fc4"}, "cbfc5c75-b78b-4f6a-9bab-55d522146ab5": {"doc_hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "ref_doc_id": "ee95fde1-095d-4a90-97f9-a3b9c11e8963"}, "da3b1a49-1e1c-421a-9e8d-3ac6fc139918": {"doc_hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "ref_doc_id": "1d5c8c49-ba2b-4d34-ade0-d7bd8da383d8"}, "0732b606-9c43-4d56-9d7e-8124d8127905": {"doc_hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "ref_doc_id": "38355a40-a391-43c7-8f26-8bbdeca2ef38"}, "53f22986-de77-4b71-b993-385b7f27445e": {"doc_hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "ref_doc_id": "c9500f3e-8cdd-4970-968d-1dc4fd1a7e36"}, "426cb3b2-542f-48c6-89c1-8cab6e11be67": {"doc_hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "ref_doc_id": "a4e16272-a9b5-41e3-ba7c-0dee4f8873e9"}, "b51de4d6-88ef-4e41-b235-d7ee62c10ecb": {"doc_hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "ref_doc_id": "cb622561-3e0f-403b-bc21-2de33a8c5df1"}, "105abccf-3823-40ce-a0c6-f362911d849f": {"doc_hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "ref_doc_id": "cda9473d-6c06-43d8-9a92-bda43d75d1e7"}, "b9f96fb2-a648-4e39-8fbb-247282f9606a": {"doc_hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "ref_doc_id": "456577f6-aca4-49ed-b376-5a08c6b2e993"}, "76866dc0-df4c-492e-a47b-bca294ecfec8": {"doc_hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "ref_doc_id": "44ad086b-ae06-4352-92d8-7bb42f277317"}, "704dbfb6-08d3-4fe3-99e2-80561d59d84f": {"doc_hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "ref_doc_id": "ca00568a-ba57-4f5e-8f1e-5db12d493ef7"}, "c3f7fb08-8bcd-4a5c-bfae-d579d5e76a08": {"doc_hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "ref_doc_id": "b8a42e78-b067-4d27-9b54-1f18c46da411"}, "977e3542-db5d-4d80-b0de-6c4db042a00c": {"doc_hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "ref_doc_id": "970db613-d63e-43b9-8508-fa578a9d36fe"}, "db6a5f7a-b148-486d-ae63-83923dc2ece7": {"doc_hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "ref_doc_id": "d634312d-38ea-427e-80ad-483a9587b817"}, "b98527fa-713b-4d02-8050-59515605dbae": {"doc_hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "ref_doc_id": "a65274b4-74e4-4989-a1ab-19d00b668122"}, "61b066c4-de2e-429d-8488-f63744d4024e": {"doc_hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "ref_doc_id": "f9fd5fc4-b6fd-425d-bbd4-b2e01d81abd6"}, "3fdacb27-614e-4040-b8f2-0ed0a61914cc": {"doc_hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "ref_doc_id": "abcd8c71-bdcb-4ec9-bb6a-0d0c75730b20"}, "40035029-ff47-4f58-aac4-b97605a166ba": {"doc_hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "ref_doc_id": "954cd817-1227-41d6-b48d-001b7f07f54c"}, "90971db5-943d-4601-97d9-50abe53e1411": {"doc_hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "ref_doc_id": "a8b8d33c-4f09-4257-9abf-1b776adeb97c"}, "5492b41a-f1e7-4678-8b83-81354a2810ab": {"doc_hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "ref_doc_id": "901375ad-fe14-4238-8212-3ee953625d83"}, "daaadde5-3a03-42a3-a65e-1fd36ba4cc1b": {"doc_hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "ref_doc_id": "4b294cc8-2db0-43c1-bbbb-f1491070f67b"}, "f345421c-d17e-4490-92ec-b72ee40a72c8": {"doc_hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "ref_doc_id": "a9b114ad-0039-4d8d-822d-a573af279002"}, "ce5b09a1-105f-4de1-8639-100058cae41e": {"doc_hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "ref_doc_id": "37a712a3-b2d8-4781-99ac-ea6d1fb3c2f8"}, "90404a2f-346a-44ed-9e86-664a43c3ee62": {"doc_hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "ref_doc_id": "e7d3ebff-1975-447b-a165-f28ade396ddc"}, "48af193b-bcf6-4c8c-a995-cfed245014c7": {"doc_hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "ref_doc_id": "128938f1-3816-4f5c-8ef2-0ff3d9e07aae"}, "3364e705-40c2-436a-977d-73241ab7c9e6": {"doc_hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "ref_doc_id": "6a83f03f-375c-411c-8fda-9dbe5be1af42"}, "a5d6c4b3-f107-439b-94e3-20946aba7cad": {"doc_hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "ref_doc_id": "5c149c1f-e615-4ab2-a761-4519d5667d26"}, "bc4421e2-1556-4c3e-897d-544d4bb9a7ae": {"doc_hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "ref_doc_id": "e05eddbe-fba2-4889-a7f1-8264b84a1402"}, "bc41c31b-fd5c-4729-becf-0063f969885a": {"doc_hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "ref_doc_id": "78bd63f9-3645-4535-8e06-6ca17dd50e73"}, "743b1bfe-6967-4c76-bc26-4cc5c442c7b8": {"doc_hash": "9a270b0c6aaad96e1209968864dace6b9983cc98a7878762959b5b1a470a1c26", "ref_doc_id": "faa439a6-e9a5-4127-ae38-4ad049af31fd"}, "66912124-c458-4429-b537-682009940df8": {"doc_hash": "ece8c3c40187f6611c3166bb6893a60a6991c2cea591b41ade46fb006ad7fee2", "ref_doc_id": "cf590306-fff5-496c-acda-56abb66b726a"}, "849cfeb4-e3a7-48c6-8e08-e9bb70e22418": {"doc_hash": "a6752ea5b76507012940e963de7b9f08f06fdc661c3815bfd7d1fb24304cc6bb", "ref_doc_id": "8bdfe187-67ac-49d8-bee4-8f4f3958c581"}, "198d7494-ff6f-4b5c-9087-b48afa279a16": {"doc_hash": "f0ed8a9b2fd581ce27abce2bf31611bffcc3b3934880d34f95c9a2e7ab468b95", "ref_doc_id": "0cafb10b-b577-49e1-b565-eb9c3c830c39"}, "53e769eb-00a6-4ee5-a95f-a7e61037bddd": {"doc_hash": "7b6fb9f8255b0540844642bcd415e9328c38f5b769dc5b845ac54a9b0ca079be", "ref_doc_id": "9e50b097-2746-4afa-8bb3-fe9839b30d78"}, "9d0c0b2b-7e0d-4733-8b74-6a9673a149c3": {"doc_hash": "a5321e44bbdc7b0ebbfb8e96391adb6bf07c3a0e184e9f936594eba32d6e8a21", "ref_doc_id": "17e8212c-e9b6-453e-831f-854b3543a430"}, "a6d53204-f04a-43d9-9edd-cb6cb61338c7": {"doc_hash": "7332981ad6013dcab87eef279fecd73542f3115bfb38acb163d98ceae46fba5b", "ref_doc_id": "f0a99e96-b455-443c-b9de-922fdd39a6f5"}, "d502eba6-5c29-40eb-aecd-bb6aa08fa982": {"doc_hash": "d005ee665680ca5b23eccd8279d11575145aae80b9029bd2259ba255e956f8b5", "ref_doc_id": "9b92ef93-0802-4512-8762-88ac51492d41"}, "a365afb9-3340-4aaa-8f60-d64b18e3e402": {"doc_hash": "005baa262512f8f9b7c576ffb84eb310f63a3f6e495d7ba744f0ccda9e9ab727", "ref_doc_id": "c251b1e5-21d4-4925-bd40-67ffff3489f9"}, "666427f9-f933-47c3-a868-3300a5c64914": {"doc_hash": "fb24d49906b75ecca7a7adbacc8bcf12360782de10c9f026b01305cebec8176c", "ref_doc_id": "f06861a2-a831-490e-826f-02f005f04700"}, "64c81fcf-c1fd-46cd-ad06-0929f59eb5e2": {"doc_hash": "d6229cb18ce1091309290603b9ecbe3448a3c79d65976775c7e354e4f2a80e28", "ref_doc_id": "cc308c70-6355-4301-ac47-a6962e476be3"}, "87d4ed4a-ada6-48be-929d-cfd6c40d8343": {"doc_hash": "c005553104bcf5d79baa7a179134855953bf93254bac0f87711c03759e67a717", "ref_doc_id": "58c28e59-6928-460d-bc4a-02adc56a9b23"}, "5784d0e8-4b3d-4bc1-a9d6-acca3b7bbb2d": {"doc_hash": "330dd02a3db51d627911ac5833a960adab085b8b85e74bb90321afa938463c73", "ref_doc_id": "fd85052b-e1ab-411e-8555-a16a5604827d"}, "b59f914e-c505-47a4-a290-9b6fc4acfc49": {"doc_hash": "fc15485e234451e54de65e8f0296efcc4d7fc195b02b07bf630bdd10afa5492e", "ref_doc_id": "93ae6eff-f6a6-415b-a497-72b804e2fdec"}, "814d5b0c-7a84-464c-a847-fb22cf9f8e8d": {"doc_hash": "2b389f0dd779fabc7ae39ad9a0625cd916d7ce5f5b4174a06e6ef340ced9a8e6", "ref_doc_id": "13d8a539-0029-4ede-8e47-bfb7ccec4bbb"}, "3aeeb348-4247-4534-befa-72038d6bcb29": {"doc_hash": "0e239881af2b12ce1f1cffd97e04251f022f91e7f40dd57a99485998ce223f7e", "ref_doc_id": "3791729d-7890-4ac6-a98b-ca248b038385"}, "e5a6426c-1f3a-4d2a-a81f-f00866437b28": {"doc_hash": "adfe845c8367775110df23a2e4f718f10500e7cce4e89c362cda51263ab2cb39", "ref_doc_id": "e1458af2-3709-4942-acfc-680ff5e44b6f"}, "88104dac-6a3b-4fc0-9eef-5d510d584237": {"doc_hash": "3fd7a27b131105904fa3e533b352933196e7dd75fc7e6cc7053da8713e96c1eb", "ref_doc_id": "7e0887e8-50d7-46b0-a480-f7426d3863e5"}, "0c4a2342-479f-46b4-bde4-56bcb149b48c": {"doc_hash": "9644e624c95cd8ca18c6835fc792a4823a044e36a10dfae4ee149252a9494963", "ref_doc_id": "f1263a5e-890a-4100-8f67-b12c3efccc51"}, "95a39dd7-9d13-4c39-ada8-2c9610b4261e": {"doc_hash": "bdc4ff162d94834d3f26cee58e3581712a37c3894321729397cfbe624786224b", "ref_doc_id": "5e63e422-c989-4f07-8f3c-b148be20ed40"}, "9d17076c-a831-4e87-8be2-ac8b3805a38a": {"doc_hash": "2e980af8cb01b2b192f9728e2048f3ff49254568816db8afbee8dc89a24726d1", "ref_doc_id": "29303cba-da57-46fa-ba55-e1623b30caad"}, "52a814d4-9169-4c47-9666-3d79e48b48a5": {"doc_hash": "e608fa82b71c3959ee31703d0d5e07dabc61d2e514401b695acf5925b33a5a0d", "ref_doc_id": "bb55b7f4-789b-46b6-8856-fb7370234033"}, "77b1262e-7840-4e1e-8ea7-e1c8b7e9aea0": {"doc_hash": "26d9d89bee58175256aa0f8b0671273314b1ca2313a07b511b7b74d9455e44b2", "ref_doc_id": "7fe21dc9-e6d5-4e99-859c-c1905abb7a79"}, "38093699-77f7-47b6-93a6-6f6c9ac4544f": {"doc_hash": "9c13ec025c853755c56d0c4887261de049c5c4fd4dcb43f8b88bcd08b829e5ed", "ref_doc_id": "0b2c6fb9-d4cb-4bbc-a903-350bdd7045c0"}, "12e1d014-d786-4c82-a345-f9db135e7967": {"doc_hash": "2b2459d0ec340b663dd8647b9b05fc123d4d74c00baab2a6cdd4672c82375469", "ref_doc_id": "70b130f6-dc82-49fb-907b-341935bf5c2e"}, "386b6e92-448d-4ceb-8990-86201dc75b9d": {"doc_hash": "e5f9fe423d6beb0b50f7bba37e3280d1f5c16576b5a74d3bcfeeceb0ed492c6f", "ref_doc_id": "914a7db0-a0e1-483c-88ee-8a7aee656d0e"}, "6c3d2a5a-dd55-4fc8-b98e-e08598c20ca5": {"doc_hash": "86d20d81f5fd9a8266672bf3809c9753390b5376881c159efd99b53442c85916", "ref_doc_id": "bfa5ef2a-379d-4bec-a437-e9ac29646a80"}, "0f1b6160-9703-4898-a3ef-176b80dbb896": {"doc_hash": "9be6934b0af1a31af8a8ed5c9a80cfa5a4d40961ba177562b3fff657f15ed220", "ref_doc_id": "6edca6c1-87cb-4ee2-a4a8-bda516e35ce1"}, "2fb83456-8df8-4882-9bd4-08245e5e5d5b": {"doc_hash": "ffa0229fcd08589fc9ad763ae8c33bedf2fa9f29a6c172b68a552e4ffc17bcc8", "ref_doc_id": "12f33b98-2bfe-4e5e-b123-ea8272746dcc"}, "9b40ba06-31ee-41e8-9c3c-b67daf68a00d": {"doc_hash": "772854cb24025e11f18fa7fedfb68adddc999116a7d6751f6027a7c1c9e1222b", "ref_doc_id": "bd08e15d-804f-465f-b4cd-806dca9b2bca"}, "75616307-f5e1-44c5-bf6c-6318704c06f6": {"doc_hash": "ad4cad6e738894300cd20ae6c72af0875574b3a53953a4e0f0e46d3085c4b5b3", "ref_doc_id": "8d830914-60ef-47f3-aa87-0b7d1b029025"}, "49ea73da-303c-4ce3-ac38-18b3cccb66e1": {"doc_hash": "d55fac7330b9a1babf0143542922026471a6626e861881861cf1b50339537935", "ref_doc_id": "060a2418-dad9-4b37-8279-d324b4ba6f80"}, "6ca37e5e-cb64-4751-b2da-e66e6f5f7630": {"doc_hash": "2e432072722a2eb9a12d26232abad234388246025bae66000ffc77d385a14d33", "ref_doc_id": "7682e8a6-c8d1-406c-a8b4-36dc53f39d58"}, "df76fd31-5a31-4f9a-8930-88861233d3cc": {"doc_hash": "900409d75c5c0e4f59559b079667126b05e702a90055377b7102646148a9c8e8", "ref_doc_id": "0930e77b-9427-473d-8819-466323f57143"}, "0d2f5075-2c3b-4dd7-b6d9-19beae5669ff": {"doc_hash": "519e67923c862ecb3f9d0ec96972c07f7a210e35a87ebae2a3edc8d584696f24", "ref_doc_id": "a2ecfa92-cf7b-4721-bfe3-06c19ebdec14"}, "e1e22611-7d27-4b21-bb9a-36e11943f60a": {"doc_hash": "ce0ba975929587a022e2711ef46f7ff326e1c9ff1bd8933d1a118f120a4758b1", "ref_doc_id": "5312dda3-3869-4e2a-9abd-2131b816d2cd"}, "dd8249e6-c0d9-435b-80eb-af3c2bd28408": {"doc_hash": "05d119a54e5e34750e0528f265dceb184b9e0c2d01e5f60fe4ea4b1e8611ea6b", "ref_doc_id": "7a3bb692-f7e7-467d-a9ad-fe42d98cd712"}, "f96e1603-61d3-421a-953f-d582611bdc89": {"doc_hash": "8afc00a29ed2d44d4329d7a5bb1ae98f5e65895c96c6c8ee0759e9192fa0e1a1", "ref_doc_id": "fc8e90b6-06f4-4047-b6bd-9ab4705bd244"}, "e38787cd-ee60-453c-bb38-12a77dd1708e": {"doc_hash": "eaaa8c20ae8a4289613150f0cca3397eb2f9e8ab6c5dd9926e6c71d296170dd3", "ref_doc_id": "9f90f7f1-0d8b-4088-91dc-3e68ccff5622"}, "b1ec5408-445b-4a27-9b70-4bf29bf0eada": {"doc_hash": "07b524934905201b72c7b3dd444493d1e79759627bd92bf7a657951ed4994e93", "ref_doc_id": "6e482ac6-d8c9-47b3-95ca-e886b8d498b5"}, "d6c2e551-3f70-4782-8e20-c4d5af38969e": {"doc_hash": "2a3dfd7719dfd807a98b2347c7fd559e1a4880e2e160f4024a086a1fff5ed8e7", "ref_doc_id": "0f77421b-efd3-42e8-a96e-1d9e30ff74d8"}, "1f2e9b1f-5001-4eef-b383-bdf2ef454fc0": {"doc_hash": "640bb049b768fa778bdc48b1be33bf9bbd5c93dcdaf75bb6d9c1ec4c56a76903", "ref_doc_id": "2900fc6b-6ddb-4643-8923-87144ed6eedb"}, "1b9abdd3-f6b6-40de-817d-f52c67f42126": {"doc_hash": "e2fae7fcfec40a9a598f97bc8da4e1deb644b9b2b2d416434dfdcf589fb22f2c", "ref_doc_id": "889efd32-d2be-4293-b2a4-06af2505e9ba"}, "6932aead-354c-4715-b023-fca91d4a6a63": {"doc_hash": "d7b71fd7424e07fe051847d3bfee4cd4df4fccb5629f03e460c47138285b9aad", "ref_doc_id": "e2f650f3-0d70-4bb4-9c46-0d04e642c7db"}, "31dd5e40-5902-4866-aafa-77c22717005b": {"doc_hash": "5dce9cd272e08af0a8bb3c94ae6449df9bed47a4274ef4888db2bdcb8cd0f9f4", "ref_doc_id": "626679c0-eb2c-4389-9387-ad10078f3d95"}, "e9cea5b8-8cb2-434c-b701-2ce2c792aabd": {"doc_hash": "b4bbd25c696d9f3757b27543ca71b99074cc1a1c002c0378b6c10140c6ef9842", "ref_doc_id": "2aad0690-5a03-449e-ab48-daac4e42bb5a"}, "c615f9ad-ca69-4382-927c-b270bd16db79": {"doc_hash": "f4161f3f16c58fd024ed5e861bda72c8c50140deeab0fe1a6f872513a769560e", "ref_doc_id": "0953a5cc-560b-47d8-8337-53a63204b61a"}, "a795711d-5e67-4789-82b3-509baf35182a": {"doc_hash": "796ad08476269cb8d30c7bc2dbda7373190998b02d32c337f89fa843993a3b44", "ref_doc_id": "6840f554-4171-4595-aaa5-60664e1a4ceb"}, "a83ae3cf-4869-476e-880e-c0e44ce6286d": {"doc_hash": "6ac7a2ca86f8ef04ca5c3fa1d5df239b3519a9ac3e4a38041862c17bdb3c3e1e", "ref_doc_id": "71cd0a7d-ca07-4319-b19a-c4d931ef207a"}, "8437c0b5-9eeb-4603-b1c0-061256085eb1": {"doc_hash": "b9fb1b136c3cf12522286df6defe8e56946e593f185b7297b7ed71aaa5c8e7fe", "ref_doc_id": "ea69e197-a5a4-4971-968d-62371a4565f3"}, "9e171ae4-fe23-4431-871f-1997cb5317dc": {"doc_hash": "032a7ffd1cc4a25b00736c2ca1692c85d47c041eb7054acd730f66a70031a581", "ref_doc_id": "f865eb54-6f87-446f-96d4-3c4259ac8d79"}, "dd4c1df9-5029-421e-8ff6-21b9699c21b2": {"doc_hash": "f4909106d968efb49e1036f347a983f50035eb7b1fc7332541af3ed2c882bc7e", "ref_doc_id": "31e2ad1a-3ced-4fbc-913b-49bcb7e1a405"}, "fc72eb5d-d4c7-4134-9379-b3fd5d4e45aa": {"doc_hash": "95453461bd10c7532157781c54e2db75890d2a2594029017a3cf2784e5638420", "ref_doc_id": "faed368e-b4ef-470f-b89a-9049079c05e8"}, "633c6a57-9679-4ab7-b7af-a5abbff997f4": {"doc_hash": "2e4852551d6eb7c43dd2692c5bc4d3cb7478410757993181c170d060ee3ef06a", "ref_doc_id": "6aac926c-ad7d-4f01-9b34-3ab974199883"}, "f24f683e-66c4-40c1-9416-e284bd8a4b75": {"doc_hash": "7f71913bbaf7950c2d88fd37550afa1e5cca0f40ca686ceb8b4cb39deb819a62", "ref_doc_id": "9935cfd7-d3ca-4c1e-9943-52bbb1599070"}, "913cb1fe-36dd-44c3-acaa-b6d4dda3d07a": {"doc_hash": "d023caf61a4ac616d7943a9d2ac4b1ab4e09f7797061819969416777e2e677d6", "ref_doc_id": "626860fd-a698-4a2d-87ed-da47d6821f2c"}, "fbf0b662-c1d1-4b07-b8d4-a9f6a075779e": {"doc_hash": "c5136fff856b86713872c3584fc0c788949062b6d7e1c7597e48fc22ed4a70f4", "ref_doc_id": "39b1b238-a91c-47e9-9c35-769c3b189c16"}, "1f9dc12d-fa44-49af-9b99-5cf57f47c924": {"doc_hash": "58dffdf66342d04c9c934dfd0bdc213572ca2f7ae4028dc69f029c6ff5334a69", "ref_doc_id": "e6783d1e-565f-408f-b9c0-2cbb68f1374a"}, "f30f09a7-e051-411d-bc6a-91ca72822a1c": {"doc_hash": "96f48d7bd89512e4cae932eda07959903f036fc280bfa12c38026424cd13b1ea", "ref_doc_id": "1146429a-022b-45c2-b96e-8499e10daee2"}, "6e8bfebc-f06c-4ed9-b6de-ae7a83867d15": {"doc_hash": "1bafe998bbd9708c1f06ffdb857deabd72b77a7a587f04b11fd47bacb4991450", "ref_doc_id": "47f96e77-060e-436b-b2f1-d8a9f59674e1"}, "5c261265-2721-4e94-a133-800fb9d46cfd": {"doc_hash": "2fc7f64dabae34a290e02eeaeac4bb8091e7c4705381e96caa3b1ccf9937d1bb", "ref_doc_id": "62b1dba4-bd56-426c-94e3-5159644a427f"}, "7c47ae9e-8f29-4b0b-9914-084816ff95d9": {"doc_hash": "304892d8e10d1c798add89c74b593e92b2417a4ef7022b70f45920249a8658bf", "ref_doc_id": "4f7fcdd8-9a80-448d-8426-1ebb3af79986"}, "803c5cd4-5912-4a9e-937d-c3a14736df39": {"doc_hash": "8124f8fb1d345eb373e13483806233f762f536cf7553e802480f298b4c95188e", "ref_doc_id": "6760058b-0b76-4bd8-a06f-577e41121c93"}, "a3bca419-b6a0-4b14-b246-39502a33cc1b": {"doc_hash": "6da3efeac8b69d6cd258e5bad35b97f01db33c94e967f11bd732222a74d49e84", "ref_doc_id": "ebe7e6da-b8a4-491e-9ec4-e4c8044c91e4"}, "2c3361b7-d869-49b2-945e-3b8ea26eb316": {"doc_hash": "079b1097b060bd10c2c508357c308b0a9c93e4aa48856724117cc8354f26af8e", "ref_doc_id": "2f8deaa1-1e14-43ca-b94c-f9247f547292"}, "43dd7d3e-a561-4388-8269-51ae14d41b05": {"doc_hash": "7c7d473f86cd73f508d8145eaa14b2ecf8d145ac2b37f6929ed5cadf0f4d8dff", "ref_doc_id": "df09742c-833c-49a7-bd14-2d96c4617f8c"}, "e3f2e6d1-8381-4431-81d4-e6f9ec056201": {"doc_hash": "7cd433820f04591482d91347125a4c17def634acf66fcc7eb4ebc58bd37d0688", "ref_doc_id": "a5a1dd76-29e5-43ae-b82d-5b440a900663"}, "696a6435-8a70-4494-a583-2350c822b732": {"doc_hash": "458fd9e51a789bdf807ea1a092966a3d152b72c8202b4da3b4d7d9db95a9e802", "ref_doc_id": "bfa9bff3-0f18-4aa5-87a4-12094a1a457c"}, "ab8d5527-d13e-40c5-8f8c-92d5bca3db58": {"doc_hash": "907135dccdc06d2340d1680c3f013f868a78257220c8a47d1f7db867ebb27e9c", "ref_doc_id": "ac58fbdd-8350-4af4-9c9c-91cf6f9ff526"}, "846f532b-76a8-4a96-991d-c5f2826b4941": {"doc_hash": "fa96cb89b35bb97bbec7ef6cdb4afda7459e75ef6982c447f911f2c58a26cc8e", "ref_doc_id": "10e43059-88b0-415f-a932-baafad83601a"}, "c79944a0-2a07-4605-981a-cfeb5001a357": {"doc_hash": "a3866c17e5a9edc9f0ca5edbf1041fc7cf1adc88deae14d33062b30a6ecb7c37", "ref_doc_id": "763c41dc-2c69-478d-9c5a-98055a597c20"}, "b75dfd7c-896b-4847-b6da-f9c599a27c84": {"doc_hash": "44036f75493ab5ff8223dfce9dafa28686f1a562a99c61fff623e72d6d47ed81", "ref_doc_id": "fb2ca3f1-ce69-4098-8f6b-3390059ab252"}, "f79444b6-f6bd-4ebd-942c-5c2ddd12fb9a": {"doc_hash": "171f149535a0e179fb5fda27dc142535ef0d9fcfabc69a5d18a80547e3f6ba93", "ref_doc_id": "9ddcc535-6c13-4ae9-8669-18a01233c95e"}, "96db5a8e-9fb0-489c-9856-6e3dbace9925": {"doc_hash": "78738ddc6dbbcdb8bff8a1b138d3e557f0ddcafe109562556beee6087a0dc634", "ref_doc_id": "6050b290-2e20-40d9-a0db-e720b77d77af"}, "c25c582b-8b7d-45db-b815-111780cf1b1c": {"doc_hash": "c70f94d429331f4752d72bf34f5119e13cd5ebd7c894dbae926bf589907f3c2c", "ref_doc_id": "d0ecde18-8418-4bcf-886a-fcc974c84640"}, "d3e75648-c536-4bc7-996a-82a9211916e6": {"doc_hash": "486ef56f200a15a875a785162d50ba2e9364babdedb355af46395183506b4e24", "ref_doc_id": "597efb37-4796-4536-aef9-ba194f78bcbc"}, "2d93049a-6d79-47ea-b20f-4020e851ee0d": {"doc_hash": "485f872a9c91767baa6b6bde2412296968606a0797cc508c733a45b585f83279", "ref_doc_id": "44c217a2-f8f7-4f53-92df-72bce3888c58"}, "3ce92a65-0eb6-4aa0-8469-2ef1773b2044": {"doc_hash": "591257a1adf102997f7c18f511d54b796b124d9c635ba0c7a86f2a37e6d52c37", "ref_doc_id": "2a6554a7-ed4e-47a2-bb03-ab150264a69c"}, "85a2aeeb-5bc5-4c5b-ab17-f43e70425bf0": {"doc_hash": "6a5d80a260f671d84fd333a028c561d3beee5afa2a036d70612dc337958178c0", "ref_doc_id": "2ca973ca-38e8-467d-ab50-d4956c09de49"}, "e004ddba-9ab9-45da-a825-571360f2a216": {"doc_hash": "a7c71d9ede029b61f2136e66985a0f4f3996572b08c54ad1587b60c63de63959", "ref_doc_id": "368a37ae-0d5f-4de8-b8dc-bd2fd255311f"}, "97339eb5-72a6-4888-a277-f3ea18b36bfa": {"doc_hash": "a719986aef3349d50d048da9b90e6dc94cb7d51bc1e9d64495686a83cc081bac", "ref_doc_id": "34092c52-c063-432c-968c-948778f461c8"}, "242b2d69-ebad-4db9-83c9-4332f5e3f3ce": {"doc_hash": "1d31fdf2ba4b22413e8915347e95735d65986430e8ca41d63f34c4a3b415a892", "ref_doc_id": "cd5ccd72-8189-47a0-9ac7-29014ec7d2f6"}, "fa317e36-a812-470b-95bd-4c4594759838": {"doc_hash": "b6ef5dd1943f8d95ee6385a6b39ab7b100ccdb8ddc3e3b85767b3f8b3c0f757d", "ref_doc_id": "12074480-b400-42d2-9b56-f2ce4b92d41f"}, "cfa32fdb-5bc0-4360-abbc-d5b3df9cde8d": {"doc_hash": "f3262c059d0e122e9e24fe84f8620e3018a8bd72bd7ed806563f3c020484af45", "ref_doc_id": "ba4d0f4e-e3d7-4476-a795-37cc7604d458"}, "85af42d2-79d1-484d-9f25-4b75bd0f421a": {"doc_hash": "f5372234235dc24c40b6a332d2d634eb08f6ec9f65a6bae1125e071961c6a1a6", "ref_doc_id": "0e9b7caa-8be3-4887-ba8c-feb0b3a6d665"}, "d378bfe4-5984-487a-af16-7f99e95c29a5": {"doc_hash": "0b9dd3780902b6257d0e5e96f243697c18b596e06cce92f6eb1e30f15fc63c7c", "ref_doc_id": "2bfc3d48-83d4-4752-94f4-8bd3881c7439"}, "64fd54be-1871-4f2a-a7ad-e83b0ca44d02": {"doc_hash": "2c94f98765888907f3da8bca4cfd2183562b5da3cbf220745fb1c103987ef1a3", "ref_doc_id": "501451b7-5d19-4b29-8f0c-6b4c20eb8593"}, "6e56c5ed-f689-4e9e-9d59-ae06d5cb28c6": {"doc_hash": "fa5a8c4bb7ebdd27d7244296b7f378d687f9e9a8dd7699a7c2401a90f2b975b3", "ref_doc_id": "48d6c511-65da-43f0-a9dd-ea3c450ce041"}, "f82f447d-abfa-4971-8162-94a11435575a": {"doc_hash": "8670949fe54c6d421799c999ea5e84710f85d6a3a153ee680c30701a0d17ec98", "ref_doc_id": "1ade6589-10be-4a3a-b3e8-c4bba274101d"}, "7c78b9a7-9957-489e-90de-1eed2e1164bc": {"doc_hash": "fe80a18bdaa0dc9b16f89d919912c9e75014189662de97363ed6b670986c67ee", "ref_doc_id": "58555620-2c7a-4d0e-95ad-e8d46735fd6d"}, "c10adae8-2e37-4207-b2b4-ab9e949c2a9f": {"doc_hash": "89a0122ac4a13985968bbafc6d5d8a40db1af90b112608ae9abe92e6eaaa1885", "ref_doc_id": "aa9bf5e0-05c5-4055-95d9-742ece533aaf"}, "c093751f-6253-4a61-8b39-deaea5f11465": {"doc_hash": "47c12eb33c5409466fa98ba4b223335ba0305f0603a54c6bbd3d5b8c8bb5073c", "ref_doc_id": "d8be5c6e-59eb-472a-bce6-d22faa2505bc"}, "7344e895-d677-40b0-b4d1-4b85f46d3b8e": {"doc_hash": "7453dd16bb43a37163dd8f7068c951992abb263436699fd3da55a2d3b8d6254e", "ref_doc_id": "89184dac-c148-4671-bf68-98842ad11dbd"}, "4563b291-a089-44dc-871a-7c12e1c77dc0": {"doc_hash": "e04040a7d7dd5bdd918eb26e85da81fa856b9d906e7142f7e9be73cbffc6ce6e", "ref_doc_id": "7e048583-ed11-4d88-8e2b-30a22fb80bf3"}, "39654ea7-b350-4a30-bf8f-a2b38ce85b15": {"doc_hash": "a60fc7fdc986f95069547f611b932276f99f427b70f11ff9cf837d3ccf65ef99", "ref_doc_id": "faf2afa8-b152-40bc-ba0b-007ad057a901"}, "8b1a435c-43f9-4e5c-bb88-bb5f8de561f5": {"doc_hash": "0f0c6bf3ad55ccf2ecc5da9e04c5b973093c04b3c6725c6cb5dbdf3be872f72e", "ref_doc_id": "aad6b8e2-b5ab-4f58-983c-0f562a8bcfc0"}, "ddd25ed3-9683-4f07-837e-ba602b42ca6d": {"doc_hash": "36002b8e6c797835353163dc9f4f7ff269aa4df3d04eb92efb8680afd8bed8ae", "ref_doc_id": "795fd61d-af80-411d-879a-abb57dd81e71"}, "4bbab617-30c9-42a5-9097-487e1a6e74fb": {"doc_hash": "8b986261f522d60d8433f504b64ae92d65c843672201d928b00d121864620704", "ref_doc_id": "ded80b12-92c4-4a5d-878c-b05f96d980cd"}, "f496a2eb-6b5e-410c-99d4-eedf04db5575": {"doc_hash": "e54e74649debfdc4e7a57cdcd9276528296895689892240596c8aa26b5d13b05", "ref_doc_id": "c142769f-bb82-4206-a3a4-1908c070f74c"}, "ff779f07-7b3d-453e-b941-eb946bdbfc73": {"doc_hash": "a0130b107c18b40ab9232c6caf9d74e3092b56fb849480dfd3d9a7cde4b22194", "ref_doc_id": "45bea28a-d560-4a2d-b916-444cf707970a"}, "d84caa3a-69d8-48d8-bd61-66a725103d75": {"doc_hash": "233db2da20178f422b505e4e173d1711b43f005d4dd43dbe1c6049889ff74efb", "ref_doc_id": "da519065-154d-46db-b57f-8c3609ed6810"}, "2ad531e9-c850-487b-abdd-a858fafbdb1d": {"doc_hash": "bfc30a8bfdefa9b426ea3eecac32275195b0618de202f0a9f569304d163301ec", "ref_doc_id": "50fa7e76-af6b-4fdc-bb32-9ed21fe55dee"}, "dcc38ca1-d6ef-4655-99df-05484a6c9906": {"doc_hash": "644fcc6d5ecb57938a3690ca299f7137aa4319daea37bcb0f0181252205d01f6", "ref_doc_id": "35214eb7-8eed-4ac7-b8b2-737df1685244"}, "e5408e1f-986e-4abd-907a-ac9d683b6174": {"doc_hash": "ed9e6be78af2e1e4508457115020b04d9c46e3db6b9735241cf5c388a410f575", "ref_doc_id": "608f1986-8e83-4a8c-83b4-5550d4afd4d9"}, "c91893ee-bc0d-49a0-96a1-aa5e16a9aa2c": {"doc_hash": "e98c5c2f803f45596cfca84ed6ce07355bd8d5c27a54f050c47add23f451e9cb", "ref_doc_id": "fb8b67c6-88ff-4dde-b79c-580338f961df"}, "6db6f5d0-40e3-42fc-bb82-8f2d09385f7b": {"doc_hash": "bf31e1ac6004706f074d9ec505ceaf0cdce5266da784b1b58a24e49e032f2877", "ref_doc_id": "cddc66bf-3755-4727-a02e-61aa52221b90"}, "4d506c40-8d32-4f33-aa0f-cf207601dd4f": {"doc_hash": "a88a4658fa8d2b8b6a65ac4a8ca9d4baf933f126fb1a44151467a43c6b643e56", "ref_doc_id": "676ebbd5-7424-4d03-87a9-4b24e99a191b"}, "67cd877b-ca57-4410-9cb0-a411524f5b04": {"doc_hash": "1962e5a3222e71a315d78c0c1978e691396be4a45f179d663bc8961bcfa7f681", "ref_doc_id": "e9a75e81-75f0-4dc0-8c5e-aee639a1fcad"}, "4dc564c7-2902-4e59-ae85-143f97e3ad46": {"doc_hash": "435d52961f2d72965b6a50e7b25b303ee07ba4cd50cf2d16ecf30564925c1169", "ref_doc_id": "a68497c3-64c2-4778-91d1-44215e615185"}, "dc32cfeb-5248-41eb-b737-6879758eee2e": {"doc_hash": "72acd7bfad9c5ff0f4dcd7f426f370b7c169e80da4b5b3e222430ae75d3f2ad0", "ref_doc_id": "3e8565b2-c9b6-4f81-9fbe-3b02f82fc234"}, "efb95120-200c-4d31-a97d-0a6610870284": {"doc_hash": "1f0ea31815859779c1ab4e6dccbfc372d0211412bc592be67c4715b99db28863", "ref_doc_id": "585361d9-185f-4d53-ad7b-ad57c5802c85"}, "c230eac4-a7c1-4b3d-bdbf-e2aa8f28adea": {"doc_hash": "d560ca68d7d56cd95299239601c03720f3d31aac2ed96f0bb283dffa96f7af80", "ref_doc_id": "d615ceef-2f4b-4971-84f3-9aeb9c07b69d"}, "74b33b46-b867-4165-a6ac-e7f0d3cfde05": {"doc_hash": "ccb80b573bc612d1798f6c532dc907204161f4678f3d018ebaeb7960f0f7f5ad", "ref_doc_id": "753fafbe-fe23-43fb-89c4-b28f937a2626"}, "58859ee9-b27d-435d-95ff-03de0553343b": {"doc_hash": "53f281b079a3ca434c966a5afcc152918b83f85bebb0ceccd60ce9ccdd41e37c", "ref_doc_id": "c58274f9-ba38-4a50-b6a1-68f288fb14e0"}, "4be166aa-d5ad-4d70-9716-9471e2547989": {"doc_hash": "447595ac557ed1f35cc07cceb9b0892dff42a1fa927e0444b8bd3352aa85e5b9", "ref_doc_id": "36cd84b9-a384-472d-83bd-a5009aecf5bf"}, "588a16c0-2e88-4e67-91e5-c6a298ad91db": {"doc_hash": "bae5922c2683e2198cb9dcade4745a2d0eb9a8a32db311bd56ac847e28bdfd6c", "ref_doc_id": "77baf678-09a5-4f6d-907a-5d0289569396"}, "79e07440-d7c7-4d70-8440-c57d388d50de": {"doc_hash": "439081e9c2a435bbc87af3da450f0d094f6ebd2c032372a794d2a79cdbd188ef", "ref_doc_id": "7f32b640-e9ef-426f-96de-6c53e287fab8"}, "f65b5e5f-092f-4d4b-b849-39b9a3758d02": {"doc_hash": "2b0d9b99880669eabcae6bbc1fb7f72df4f84096e9afd602acdce6aea152664e", "ref_doc_id": "b74c3f8f-e15b-4e1d-8cf0-c054c3c9e0cf"}, "1cc288b8-24c3-4c7d-8f26-c047a89c04d8": {"doc_hash": "d80a1540c6e695a1fdc1ef2ae1b74b229e60f2dff09db2519183dc48a3b23dae", "ref_doc_id": "00c85756-398e-4514-b35d-229ea2e0178b"}, "d15ad201-d382-4c47-a0aa-e0761402f818": {"doc_hash": "f04e10b089c6f97bdabd4ad263c73c03fe00fe53044f4af0866848b7f05cd60d", "ref_doc_id": "f95ab15d-b4e4-41c8-897d-ed29cb5712d2"}, "0614a1a0-c704-471a-b663-1da68cd37369": {"doc_hash": "4415f1d4ad10cb654dad97ce42299b7274b1a2810cb670f45e84b646fe6b9937", "ref_doc_id": "ab863388-004f-43ba-a8c8-027f3a904982"}, "aaa38d44-3bd5-4bec-96ec-93ccebea64f1": {"doc_hash": "50942c194ab3ad22d3fc24b2bf7743baf85eaa3d4963eae0eac1527e46d21040", "ref_doc_id": "8c0cd4b0-dcdc-4fff-8fb0-8807bcda1c56"}, "69bf15d2-bee4-4836-9e9a-134509aa9698": {"doc_hash": "38677fd1488bb8cd732e65c9e9f9ef450596fb22eae1b4ec28c7fc884f36dfa4", "ref_doc_id": "c4398f28-d639-4bbf-a737-f8e1fabf3609"}, "d4d5b99b-f71c-4fac-ae6f-d4da0ec60e49": {"doc_hash": "d37ed8d3b134300895bfaa489c5e5d320500a032f98180803295ad3af4ac567b", "ref_doc_id": "51a580f1-c5be-4fcc-bc48-212752d8424a"}, "f6bfd598-0c1c-46dc-bafe-0499654f6b7e": {"doc_hash": "fb8a127ee8edbc780c69eecf53ac4965768652b0dfdc4d6854bd99c17f102a76", "ref_doc_id": "e9e49085-8a8d-4bb9-b113-0abf9c9e505f"}, "7233ef67-d7ea-4aba-8add-5ff7fdced4bb": {"doc_hash": "3b4d77317857894056a96a2a5c97482ab1222e9571d51fcdfcbc74ac72da1302", "ref_doc_id": "502f45bc-e4e1-48bb-9732-56fb3d60e85d"}, "00802514-5b0c-4512-8b18-eb0c126c53f4": {"doc_hash": "952afe85c5c02e6f1f3b3c3485de6a09831bfcd8f958c6aecf31322a8f1db11e", "ref_doc_id": "08e7225c-b7f6-429c-84db-af6849a727b7"}, "e318d8be-0ca4-465d-a4b1-ccf07183f01b": {"doc_hash": "7036364494173af3a1ae9386cd143fce3d2a4f473808a00a748908989c301e4a", "ref_doc_id": "08e7225c-b7f6-429c-84db-af6849a727b7"}, "c1b5fa23-2bc1-48fa-97fb-f2f63257a98c": {"doc_hash": "cd65052149ef28ca7e9ce8d220e205a8162b9b1427f1313d64fbb20a74d3b8d5", "ref_doc_id": "72d0f21a-ccb6-40ff-badc-13c2e3ea8593"}, "7d035ae3-f134-47cb-bc62-773a847eec70": {"doc_hash": "b261e594c4775f24107eab9813d34605f48d5c6b2bf2633582489a993ff0e597", "ref_doc_id": "0820d5e3-caf3-404b-a1d3-8f65c2099c4f"}, "6d9ac7d8-f57a-410f-b248-0709b0f71014": {"doc_hash": "2eeb005f526edf5caddf6470767764a944724148b546cdfa64b39c0d8f9e8f19", "ref_doc_id": "420c75bb-7740-4da1-a112-c2065658e5be"}, "fcbc1f0e-0cf7-4003-87e1-8f0916b78e5b": {"doc_hash": "d28ac8c067a154e5da697351ecf69ddd1cee9197e95a234a7bd1bc8653ab76c5", "ref_doc_id": "420c75bb-7740-4da1-a112-c2065658e5be"}, "af618ba4-256c-40fc-a4e6-1db5d9567dc7": {"doc_hash": "8a31eea07cb95ecd1f96ad91171655059151943314a8ba0464d54648d15f7e75", "ref_doc_id": "63720f59-3cf7-47b4-95ee-24e8b5e1caae"}, "3123b027-a01b-4d29-89db-64a15d5dac10": {"doc_hash": "5db212d1e7adc879798646f1780158c1b82f701adc78b7f383958e8194b2df79", "ref_doc_id": "5449c7a9-b3cd-4b7c-a1c7-a2aa227fbe03"}, "8e9b8ec8-0bf0-40e3-a001-bf0a490021b3": {"doc_hash": "64bf4168a46a2d133899c00a20abbb5fb52c3fd4c60eaa41637f325fb868398d", "ref_doc_id": "cb571722-6937-45ae-b819-2eedb2d797ca"}, "026a483e-4c1e-4523-91e8-856de90e8d8a": {"doc_hash": "995d02c4c2df9fa92430ef43da79385544d78848a13ef81c47c23ecb92d3b9d9", "ref_doc_id": "f58188bd-0b82-400b-8891-553261a31bc2"}, "fa00c477-6750-4dcb-ad03-b951ab8859d3": {"doc_hash": "27a6bf90026a8fd0b60f684425e0366cf6a9e424ecc55c81faf6d5c69d67717c", "ref_doc_id": "91d463a9-fd2c-44e9-bd1b-4d88f8599527"}, "bb236bad-4be0-4547-af6c-1ff05d05b156": {"doc_hash": "497231065f28db71922fe62dc6e431f8e7325ddce3895a7359d0d7d77bd3fc0d", "ref_doc_id": "22cbba2f-b3b7-44a9-bf02-131c2f796290"}, "a4c50c9c-77af-43ba-be31-377cab480847": {"doc_hash": "c0199243b7b638e1e3c1554a6117a4cde5ee2a27afd9b80209ddd056b2a878b4", "ref_doc_id": "15165df8-7f27-4dfe-aa4c-f1f714746809"}, "d378ee94-5968-461c-bd0b-bbe6c8149a40": {"doc_hash": "45714dbf931d383e68d90ae36c6ec32ed86e8b8fb2b5504809cffe5f2f18fe54", "ref_doc_id": "adbd3cf2-bff3-45ce-a74a-d99627b7e497"}, "fdbd3f93-22cd-4f9f-8784-b70fcf177d37": {"doc_hash": "6368c9a19f161aa2ca006ea7131ee5dfdd9153c5bcff57dd9d7a24fc676a54d4", "ref_doc_id": "adbd3cf2-bff3-45ce-a74a-d99627b7e497"}, "dd504638-2fab-4fa8-bdb8-d2efccf871a8": {"doc_hash": "bf6fc2cd6614ac446da10ea48b3cd4e98e001656d4eb73aec38e295e57b20f50", "ref_doc_id": "12d29cff-4ce9-47b1-8fed-4c3f79929306"}, "56df7fea-b4b8-4ed8-8d8f-4233f2768bc2": {"doc_hash": "c8d37261d573f1df6f59386d1d2dddf4f55507219372f9c862d06c78e9d69016", "ref_doc_id": "d59f6c63-0c66-4f1c-b76e-090a232c54b8"}, "a4ad58fa-56d8-4a18-b4c6-efa7661591c9": {"doc_hash": "561ad24a201e661798e2f6f6a6f8cbf48524309e95ba6fa53729d478899eea91", "ref_doc_id": "885eb6a5-cb49-4570-965d-f6b58e0c0fe2"}, "f93767b1-edf4-46f5-8582-b48ae030b7fe": {"doc_hash": "6699ff70abc757a28edb84756e9569bfa0aadec9e3cac75277cfb2c9d93e396f", "ref_doc_id": "90cc1b54-f4bd-48e1-8a41-51ca9793e45a"}, "bd69d87d-a665-4482-96e7-253d5b7043b5": {"doc_hash": "14a63daebd6455945075bd9ecfd30984fc3a141cb738260eae9bb502759eb1bc", "ref_doc_id": "660ee9aa-b5f6-4e85-b3c7-eac50414cf86"}, "960a400d-4c71-4ec5-aacd-4fbf83d9fc79": {"doc_hash": "71b45b760716df5af2444cb0e02df6f8576578fa8d2795bc4756f10df5760d62", "ref_doc_id": "e8cc0203-f572-4d50-8bb9-97d9a246dfae"}, "36bc9bdd-14cf-437c-b202-80bb294c0b85": {"doc_hash": "7a18a27c3ebe52df521703192cef7f769280963214840ea0236206aaa02aa45e", "ref_doc_id": "e890f3b4-5613-45cb-82d1-c55b0c04a968"}, "e0ded539-ee3e-4e51-a1cc-f752db8e7289": {"doc_hash": "0ec0f9b84bc08e7f75a633da7e7a0fe37abe658917059c4a34d545e3fe84cbfb", "ref_doc_id": "507d2f32-d2b1-4fcc-b0bd-7b53ffb2970c"}, "ad2b92df-44f4-4b32-9452-9e2b5626c703": {"doc_hash": "53b5583d0b5237d2089044db9e15f223894175b464a44925eddcf4810bff97f0", "ref_doc_id": "6a1e86a9-de6b-4069-8542-120f11210412"}, "489014bf-d915-4db9-9fd0-545bb7056f47": {"doc_hash": "a70ec2459ea74896c96f054a265c1d35037fad5af0a49a57928818f6a435aa4c", "ref_doc_id": "60c723ba-fed2-401a-bcf1-62bb55609cee"}, "5173568c-25c4-4425-b4d4-ad7f7a0a9cc9": {"doc_hash": "69b30792df9aaa495a10344ba148d8c98a86d7cc2aef17aeb3ac5308fee7532b", "ref_doc_id": "32f6e827-830c-4d6f-987e-c3dc65257bfd"}, "fe1c7718-9023-462a-a7a3-ff79ff08e185": {"doc_hash": "d72e2eb6ac949d9c1b54248a7ca5c7a725175a866707b7d7eff4aeafefe4d4ee", "ref_doc_id": "43977066-e126-4ed7-a320-b760ed17389d"}, "c856e5c5-504a-4bfe-8cda-e3d40dffc7bd": {"doc_hash": "7f0043d71632af9a3dd2a5e5287e9dba4aaaf3b816c9c09aa5c5fffaa1573a93", "ref_doc_id": "e0cc119f-5241-4982-a059-f6f6ad9e4665"}, "d6a5f038-fba0-4770-8748-85c8de7ec4bf": {"doc_hash": "cadf21c25a2529dca9b8301a55cf483b779db48a185b74def4630204f7fb8319", "ref_doc_id": "5c8e909d-0d38-4262-b732-0c16f4ad2d7f"}, "1338489e-8a26-4fac-8a57-3a7fd1ca0650": {"doc_hash": "27844fcdb5b5f54d11d1c66502ea44d82e4bae29c7be877f5aa585a4d9b4e241", "ref_doc_id": "02cbb9b8-4acc-4d55-9f29-fea85a947a02"}, "f3ee7d54-040f-4427-8f53-5bf0fb5d1229": {"doc_hash": "c689456c152add4c202e6f4c1f751c0aacbf8ce37fd66711cf5c86a04e6ce2de", "ref_doc_id": "a7d05f95-c684-40f8-859a-dc644a2ab29d"}, "5274ffed-a9f6-4d1f-a161-280cb4c9326a": {"doc_hash": "7e8b124516e087e93659c0c346edae25b5a4ad5259831451f0cc0478a57c8d48", "ref_doc_id": "1fbe57bb-23e0-49c6-9362-2d68df7fe784"}, "f45c210e-8286-4064-9f4a-a97a9ef12a55": {"doc_hash": "56b71a1dcf1a41ebfceeece6246924e2e04a4c3cc9f8191dc9d2a96042178a38", "ref_doc_id": "6cad669e-e920-45b5-8ce2-3917f9cc3691"}, "f6983e53-3421-48b5-bb68-d9a756c6dbbe": {"doc_hash": "785df62669e4d232e51650f9a55d2c9bd41a2166e3a28d3f2aed62b0d1b4baf4", "ref_doc_id": "74c79f6f-ff44-46b2-bd87-fc295df69cd9"}, "c50ea2b8-f5af-4221-97d4-57dfa82115f4": {"doc_hash": "75474aef9f4f5bd37bc0de5698aa8e3eb81a8dcf56d5a51cb0d592c2864b6ab0", "ref_doc_id": "f953407a-08cb-4e59-8048-c6bc3a580953"}, "721d54b5-45bc-4c27-b3fe-b6439b97a3e0": {"doc_hash": "4cbe81e79f5bf780c51093900a6c74b76d32675513d6175f388ca4177030e473", "ref_doc_id": "aa77a454-2c53-4417-a147-ad55d1e5db08"}, "274bc76e-b7aa-48a2-9498-5e9d76871546": {"doc_hash": "e39acbf430a7a519d0f09eb3831bbcf35c1d058266aff53aa605e2b67c1a78fd", "ref_doc_id": "ccb80cc6-8a55-410a-b26b-b48cf26bca78"}, "b639ffab-daf0-4c33-a26a-f5064621925d": {"doc_hash": "6afc7541aea89b0733cb901bf6e7f763fdedec947b0228e215deb764f5520ab1", "ref_doc_id": "eafb5b1e-534f-445e-b4cf-09b6d48fe65e"}, "58cb5f0d-dca1-4451-8040-80f78d0cdeaf": {"doc_hash": "48d70abf655fa1dcbac1fb72607481223b49694424a19b6e36cfe956acfdd0bc", "ref_doc_id": "4594f60c-55ef-4da1-9b9b-fe12b1d99028"}, "d9261bc9-ddf4-4c06-ab2c-99aa0d95923b": {"doc_hash": "05e6c679ccb77511bf595dab5cb99980bab8f57617e8dcb3ac95711f70594866", "ref_doc_id": "200ad9b6-5418-4eec-9d82-d8e20e70e402"}, "6a62ae2b-406d-49c2-8b2a-970b2d47c2e7": {"doc_hash": "b739de32cf34d48e39a1e87d383aa0758631dde30ee6f8dcdc9c9df7d8700484", "ref_doc_id": "70260c34-44e4-4545-80ad-50b57dd8f102"}, "e6525d9b-1add-4256-8229-9f9b0109fef2": {"doc_hash": "eb09e41039a1561205ca338f66af3e16015b1024673e90ea7fdece3e31171d38", "ref_doc_id": "235a6c84-fd2f-43b8-b058-779e43fc9d68"}, "cebd430f-8c87-4f4a-941b-e1006c882e0d": {"doc_hash": "445b71eee47fb6c6114d330984d5c61173a57ae5bfe02a23147abbf10d779fd3", "ref_doc_id": "058d2500-1a16-41a9-b51f-9dc258ee821f"}, "3781e6b7-259d-49bb-9689-d6d70e00ad61": {"doc_hash": "afa30723c091e8f0106166a81418d936dea17a619cd3373834c2ccbab1cc2eff", "ref_doc_id": "c97853cc-fc84-4045-a112-260b6f167514"}, "3bef0c62-b25c-48a9-8ee1-f8a794b768b8": {"doc_hash": "0ad9dced695615111a5bb279a4d94556d91b65cd2fbae08d7d5d72696c0bb14c", "ref_doc_id": "9768d38e-9c7c-498a-ac56-bd3017c60eda"}, "ffd47a37-e834-43a7-bd57-be0d73e9a9d0": {"doc_hash": "8c2f253abde9038d6bd55cff0e9affee74863b13a65183e8ba42bd54e775a299", "ref_doc_id": "87969b43-049b-451a-a449-9b23bb7bc72a"}, "f5d13fbb-119f-4882-a80b-19dadc5c427e": {"doc_hash": "09d4e298718b34c533a91e02c122b782d8a917d1eabe9bdd87c485d4e7e78b68", "ref_doc_id": "1d6ad802-6cab-453e-af3a-cfe845af50d7"}, "591f8bff-af2e-4639-b122-68833e2e18af": {"doc_hash": "738f05022764a3e9f96b47c514b6885020bbe6237c945560981ab3e5b1b706b1", "ref_doc_id": "148d2db6-3a89-4158-b0ea-690cdc899672"}, "2adbbe4b-7d1f-4212-a712-a31e64ab5a19": {"doc_hash": "855a075b6190c7596fa70679fed2dd4f9c366669bd1ae5ea89a57f275f29c1e8", "ref_doc_id": "7b33f86b-fe47-4863-8115-9584903253c0"}, "44ac06d5-c76e-4455-b1bf-ac1249be72b3": {"doc_hash": "255c5f97dba14ed1fd0b44307fc3c7105f79394293e1bb92fae3b13744296b17", "ref_doc_id": "ed5230b4-63f5-4837-9b0f-04bcbda52e63"}, "98a5e8d6-b5d8-4e82-aa79-7f4d9d0b86a8": {"doc_hash": "386dfffe67286ddc69d82b39ad3e185fae29892786494ef3f226f8e08edd3519", "ref_doc_id": "fa42baf8-1ae5-418c-855e-a36d463371e1"}, "540075a1-9aac-41a9-9a3d-f146e22fe602": {"doc_hash": "813d5c265492a33559c4592efe55cc3a194a3ccfb31d99379fe9ffa7d427db6e", "ref_doc_id": "a4fe5449-4f7b-4dbe-999b-3265415d817a"}, "393e9142-e5be-4f8e-afdb-c34257c2337d": {"doc_hash": "859f31b70f80f007e7b457c4b5752f09dbe5bd54ce451aef4fe391d45ff21c75", "ref_doc_id": "f2337909-1244-4aa2-83bf-ef683badee97"}, "12091986-7fda-43db-905e-67286280b78c": {"doc_hash": "b0f0f2d0113c72c731fa2e11af8eb498dd20506256edfdbac4e52f650c36fab1", "ref_doc_id": "2800c53a-abf6-4893-8930-42ecdefa6eb2"}, "158c5880-e03a-411d-89d8-b17e71158a9c": {"doc_hash": "be5f44f9a939986245a08d7f89b173154a7cb91340ecbda80247735e3d98c6fd", "ref_doc_id": "b79cb07a-468c-41f1-8c6d-e8ba9bdbf4f3"}, "6b472920-55a2-4458-ae52-0bf3407a2377": {"doc_hash": "3a6ef6c5b172dca167e8f5661a97b7fe2c0640dc947c587fb7df4b31dff9efb8", "ref_doc_id": "1ba1020e-d908-42b5-962d-226b103deb22"}, "cdd29e47-f21a-444b-9e4d-e9804ea5efb1": {"doc_hash": "0ee35dff150226c5c6c17f7115cf7bd8bd4dc49d501a8067e1834dd4395278ab", "ref_doc_id": "b7e81fbf-cbf2-4ebc-ae83-7bbbd66c18c1"}, "a115f74d-f191-4f5a-b148-c1d8ff606b6a": {"doc_hash": "dee666efe24efe3fba9d7bb241a69273ccf5a55f6206c08784af0707e18b9f7a", "ref_doc_id": "eebacd36-d1ae-4211-a612-9b0c6e6e8402"}, "2670791c-f725-4655-95b3-491590872b2a": {"doc_hash": "0afe20af61a4c927f27a99757b8fe60eed217112a17c8e881c40d315110a00b1", "ref_doc_id": "62f93347-c3f5-4bcd-a866-7d73c672aafd"}, "b0e568da-e6ea-4cbb-805f-7bc387dc42f8": {"doc_hash": "54ddb3499a2716b922a2b12892873b3848791224a191225ce613b05857713bb8", "ref_doc_id": "f364989d-88f6-49f6-978a-2b06bb3ee521"}, "731d71e5-5dca-448c-aa36-30c4b5c6538b": {"doc_hash": "7041764209a462f709dce39f57467ca116f18fd9eb09d6a4ed047d192f315811", "ref_doc_id": "a83cec2c-741a-43b8-8226-74fb4ee60714"}, "6856ce5e-865e-475e-9a08-588760b38569": {"doc_hash": "140e9909b76a889e18527d9d68ce6189e61462536e207c20b3309e8192c76a4d", "ref_doc_id": "d1af7bbc-e00d-43af-81bc-cca56fe53539"}, "df514b50-556c-45b8-94c7-e94287ae6fcb": {"doc_hash": "a79b84798c04ce5e5b7c85070d79a10e648f264745632df301784fed35dba9c7", "ref_doc_id": "72045606-e6fa-4e45-8b18-c0e723483269"}, "c21ec95d-dee9-4fd4-8f91-1fa89bb59779": {"doc_hash": "8bd745a2473ecc7ee42f45931ac5974db5bc24c9cfcc2ede77995fb64bf11446", "ref_doc_id": "b960c6e2-d801-4396-b826-6bcf5877c7d6"}, "1397da04-9c35-4fbb-abbc-8e95a13d8fc6": {"doc_hash": "e1fea9da047db5f3f159345754966560cefabd656afaa2b77abed50a50a9fc2c", "ref_doc_id": "b6285e2e-fbf5-4430-a77c-4c5ad18a7b82"}, "e161d825-90eb-473f-9deb-3a056084b7b2": {"doc_hash": "961661beea0c960e790040a9f4c20930d33642dc63d2c5d8e247a985170ea06e", "ref_doc_id": "2ecc4df7-6d72-427c-8541-3a1740e2db96"}, "a5f65d4e-9325-4cd3-94b2-f249ccf2bc0c": {"doc_hash": "bbad07bafe272431f1aeb5999268d250ccdd17f37a8b0d5ce3b987183c5d6443", "ref_doc_id": "2ecc4df7-6d72-427c-8541-3a1740e2db96"}, "e1b47384-115c-46fd-8afb-025f4185f5fd": {"doc_hash": "6a2079a0bc23d97d06a4de94491f44a07474a3828263f6f281789903d086dd2b", "ref_doc_id": "386cfdfb-1bcd-4b6d-b434-1651b6271bbe"}, "21ecd05b-d546-4f51-9942-de046fc52bf7": {"doc_hash": "595e2d0ad5881b3c8cabe3bd9f62d7aa6915c3ca4eec2aed7006d230851893ff", "ref_doc_id": "8b1ef82c-4171-4c79-b119-18fa8cb38fb6"}, "54c37385-8def-45cc-ac78-721395df8c8f": {"doc_hash": "29b8ce7ad5416f21f38c531054ca0759d4d459ce523dfa29470d88301d31bd50", "ref_doc_id": "084e1766-7ca0-40ea-87f3-c407d18b6188"}, "4b7efb6d-3241-4d62-966a-03f8bcf34225": {"doc_hash": "5b2d3cc5697c0a2e83ce5f69e8ee3b659328bdceb0c79b9a74d745b77daff0d5", "ref_doc_id": "acd2d6c8-2b2c-421e-901e-7901e2ee9fb1"}, "c5df882c-96e6-4a40-a3df-6255e7414e16": {"doc_hash": "5776954c092c08a78cec4f29be3f1f9c765171f0a0426fc6ef8536e466f8a8cf", "ref_doc_id": "44c24618-40b3-4523-b4f6-b06b099f7a98"}, "858446b6-f48b-439d-a835-61be8c2e4bf5": {"doc_hash": "27792d7f68277edd7dc19020db884d4a5b9ed7ee34961b671eece9a1c429806d", "ref_doc_id": "982aff09-6e9d-449b-83d7-c176b56ecdb7"}, "4904536a-c4ca-4e75-b91e-c11245aa1679": {"doc_hash": "9c3022f774e5ec83647df22e9970dfe2869311a74ee58a544afbac297f209b2f", "ref_doc_id": "e23c03b7-b7df-456b-bde7-bdce4376f15b"}, "9d386391-5402-446c-9e5c-eb8d03f05de1": {"doc_hash": "dd78f2cc298e72df5243796c72b88f9bf67ab36685314fdb113294157ca1593c", "ref_doc_id": "af2e357f-51be-4f64-8c27-5922ee44a625"}, "f46ade73-dba3-4f6c-b5f1-cfa9a2b9b48b": {"doc_hash": "325e60d8b2490286bab4d1629a37b4a45adab7387dbd8f22262dd636df72132f", "ref_doc_id": "249c84da-2dcf-43bf-9f08-8d45146acc0d"}, "8171e91f-2cbb-4030-8dc9-484c8f5d3d4e": {"doc_hash": "114ab05c5e2df9b0061aa208a2c2ef19fb4106496cd5751b699419eb85c45fef", "ref_doc_id": "371ab62e-00d6-498a-b690-1428e8675da5"}, "8579c206-bd39-4bc5-9d0b-547642b957cd": {"doc_hash": "9bc0b07f487e60911069d7f9737b715af3a8fea4637faeb540a62696d3394352", "ref_doc_id": "c4fb3c50-4e4c-4404-add0-a6a906ac1e07"}, "91d96065-e559-4c05-8939-6aa595536421": {"doc_hash": "dfc85d0e9f16b0b395d6b729c7ccc4a6a3e88e06d7a876a9fe29b53d4b2f57a2", "ref_doc_id": "dce95373-dea3-496e-96fb-40302db73c2f"}, "17e1a5d4-d315-40cc-9f00-730237e2395c": {"doc_hash": "64ad711e11066758ce8f5527a0d3307f077b206d40d321406a40d8ed52ed0f0f", "ref_doc_id": "2adf137d-2160-4b72-8c56-a351d0ed5261"}, "ccf7e343-5395-4bd9-bf90-ae98a2118bb5": {"doc_hash": "6395bd1a7931eca5cabc0182f680b80bc55fc22d7a710130612d24707b538a7e", "ref_doc_id": "2f2188a1-6786-4ea4-8264-8caf70c3ecfe"}, "6952a03c-1a71-4b95-9c30-a37677f773b1": {"doc_hash": "7884350acc99321a5836337d668e5342ab23b728f74dfd9270499bba73dea990", "ref_doc_id": "23cc853e-5902-4f96-ab2b-64cd2b50c23c"}, "845dc911-e7d5-4c12-a4f2-00d4496e7472": {"doc_hash": "26409f2ceb369cb6ea636c35c4bc5020600b5b0d69cec9caafc458e15f233738", "ref_doc_id": "d6876d80-a667-4d9b-9cd4-e1b8f83059aa"}, "17ee0d31-abf4-4e9d-b7af-dd0808d25aee": {"doc_hash": "d9a296effcf83653df8fc5882670b30fa8f2a1076ecb77194a1486ba8ae8b3f4", "ref_doc_id": "4c3bd284-8395-4fbe-9945-3d2235a15ef9"}, "c5a42640-72ca-48f0-8ff7-29e695e0b367": {"doc_hash": "5c910a240986ae6df9dcab7a9c819908a850b57dad10a1f2703ea89549e49709", "ref_doc_id": "c7b518f1-9d5a-450b-93e3-ef139d868681"}, "ccd709d2-0c5f-417e-8d57-5e4e61bce1c1": {"doc_hash": "bc94bfd53cc2c5998611adc8a6c83afa8d03ccbe55548c3a9c8739e8bbc01cd6", "ref_doc_id": "e1560ab1-9ac0-442c-8429-1c8bde6cd676"}, "ffb0ac26-1f6c-4a3d-bc0c-8def840f21e8": {"doc_hash": "11cb89bbef3e0f5041b7a0f2498b6d73e671cc4d5875a1499f550ee8ed66ca2d", "ref_doc_id": "bb1c2868-95ab-4927-8d1e-0d39f19e92f3"}, "50a01a9d-0866-4ac3-9f71-f569eaa8b8d9": {"doc_hash": "bac49b1c2b2d5ba063da1ede045dd920ec90b098663334d4457b012bd3e38f13", "ref_doc_id": "7c939eca-317c-4258-99cb-5c74a5659821"}, "4b25ccfb-f003-40af-a990-17acd9e0ecde": {"doc_hash": "395eea5d580338772a5b195bf9af428c43a8afce6fde2dc7b9c1669d771809ca", "ref_doc_id": "2dd3e5fc-c882-4447-9aa0-c2fd0ed465c2"}, "3ff8331c-b4dc-47ef-8d84-5ac60f0945b2": {"doc_hash": "7ff776d50cc6b95b3bdb33b9edbd6700a6afd4fd862d44cb73077024e17a888a", "ref_doc_id": "767a1b8a-d0ec-40bc-aafc-23e7c71da3d9"}, "53e9de49-8e96-4b11-806a-af29197e8818": {"doc_hash": "a3e1759f5d7dfa50198234849155fbdf0b93a9b4dc53281953f4a6feaf896ce3", "ref_doc_id": "205cb9a7-19c5-4edf-9234-630f474f42f8"}, "6b0bdcf2-91b5-4eb6-a5d1-b963138c86b0": {"doc_hash": "f7557c3dc989165f8807514b99dd90feb3dfaf5432c18ac56c0ecbc2e4bee991", "ref_doc_id": "6d2f1656-b98a-42ee-acda-300ab8a0f2b7"}, "db8e95ea-2d1f-42fb-9fc9-8aa281618e27": {"doc_hash": "abae13c7913699c7f0d9d4dd54c5055232dd35749f373cf43ca5e270308c6a33", "ref_doc_id": "01f5f8e2-1f2e-47df-9cb8-c10a5f7be7fd"}, "3a2495f8-11bf-4407-af26-41ec58ae83ac": {"doc_hash": "7ed2d94f766274c699390b38e38af4311d432711dbd7cc319a377c13a31482d1", "ref_doc_id": "275c3805-a2b5-45fa-9e53-ceeedb461dbb"}, "13124bd5-c264-4d1f-8060-996e3d03a581": {"doc_hash": "134cce5602cf95b340e46a35b6557572ae91c7b5a112f192af78075ace74e702", "ref_doc_id": "2ac14eb3-fd15-4040-8bc9-8b361ba5f49c"}, "37841e7d-854e-4d4e-b656-688f7d7c45a4": {"doc_hash": "d34a7b7b2b1893c7ddae1da062384d12fab0509c01ff5fe62e38bf31618307d2", "ref_doc_id": "0d6633dd-c16d-4905-b269-2740811a85b6"}, "edd00660-4e4d-4306-856f-bb1ad543e8f0": {"doc_hash": "7825706a4598ee2f11ab8f1c5decf678c951886e53794505aae4516fcaa96133", "ref_doc_id": "b4344d7c-1af4-4822-8ff6-d377692f14fd"}, "50bdbece-7d26-400b-a0eb-4c7156c174e1": {"doc_hash": "f79d54089411a5c79d597154b7706f4753e74307181c69976eb69220853fcc12", "ref_doc_id": "dc96d952-3b21-4860-883f-572edde32940"}, "2ce31f21-0010-4d52-9c25-9026cecb33a3": {"doc_hash": "02b10a0d7d23d712036e7ec882910d0b3b1f59443502b794334253a73e1cea66", "ref_doc_id": "7bc3e66c-aa18-492a-89aa-b809432dd3fe"}, "a7c3028e-979d-4ad8-bcb8-548f5b24b5a7": {"doc_hash": "151fbececd595b030f04874d58020b13ba1cb50cb863b4a3ccadeaed5ddda422", "ref_doc_id": "8a2ad419-0210-4b79-8bc2-1a0113009712"}, "901feeb7-7a1e-4c6d-9355-8dccaac750f5": {"doc_hash": "bbdd0393e6acc73511d0690e9240fa198e44d21a97180270674c453ac4db02cd", "ref_doc_id": "5142cbcf-672a-4792-90f4-2bc3b1344651"}, "e02992d1-b98a-4460-a3cb-89982d0a67ba": {"doc_hash": "94bcc496e663ae8e91728675114d03e285ed038f367426eebf351954bbf84b9f", "ref_doc_id": "a26ecffd-a8c4-42ec-b47d-7988ecf68516"}, "9a61f722-cb16-480c-9abb-f14269ee8cd3": {"doc_hash": "a2a97471233e14318429a81309baba57440d18ab7496b193b5423f0496c744fb", "ref_doc_id": "abdb1f43-a212-424a-8bd4-5f74f15b0a1f"}, "e3eeaef8-b938-4996-b0e9-0b0f7e38dbbc": {"doc_hash": "9ba5dbfc92e643bd76ccce76c1a72b1c5931d1147b2879a9a134bdfd1add6111", "ref_doc_id": "5f9fba4b-72aa-40d6-8206-36f011a41efb"}, "a1fb4498-dfe4-4315-883b-46b3b71de77e": {"doc_hash": "e69a655001bfab3d892e8f4a667325edf95f384b1485b0e39cc5cf20c6c85ea4", "ref_doc_id": "3878b1fb-4eff-48d2-8652-bb6456f9c205"}, "65418be6-d2c0-45d2-abae-9c63c7f5034c": {"doc_hash": "cb787c9eeeb61cb18cc199ca0f993ef6891cae0bf976e507a7a05d6e604f804b", "ref_doc_id": "5e664123-9dd0-48f2-af91-a6c5daf90610"}, "d10144a7-a310-4f59-afb2-3067d49abbeb": {"doc_hash": "15141954afb15b2331be2f534af2a73b96aba154edcb961c8f41e8b3acb2fcca", "ref_doc_id": "70b3d11f-00fe-4050-85fc-cec9d32da8ea"}, "b0cc5c18-0d90-44d5-9821-ea5ea59911d2": {"doc_hash": "d02909ab78a14628498284018fc67e5b6525a98242a1b589a2718f5ba9e1baab", "ref_doc_id": "68def7e2-8124-4bf0-8426-c49bc63af5e7"}, "21abed0e-186e-4656-98b0-8ff3adacc9fa": {"doc_hash": "703ccf7d013b412eb8b81ad1d3dbf1f74e255bfbd4610bb780fcd5736e94b46f", "ref_doc_id": "eb9b478d-379b-48b2-a1be-2cb1d0004acb"}, "0f80ea8f-1128-43ff-84c7-793a00bf1fc5": {"doc_hash": "2eaff1c0f8a4a708c71e3c1047a97eefc68d25dcc86e3ca9cbd01b6d1d7edcb5", "ref_doc_id": "f40b78f9-b94e-4774-841d-77479410c0eb"}, "6a876c0f-ec47-42bf-b7b4-82239db4fb9e": {"doc_hash": "40d58f93a1e1a247c0c24097ac126c6dedbd559ee7cfde049186b49cc37a1432", "ref_doc_id": "9e6acf41-80f0-4426-a035-6050fc4efdc9"}, "4156d059-1c70-43d5-9afc-ee865ef87133": {"doc_hash": "b7df3ca61068b3af8a571872ed99198a340c23a5b272e4cd236ea646655405f8", "ref_doc_id": "3091e2fa-cdca-420f-b1e8-bdb8b7d72eda"}, "2ed95525-e3e2-456a-8316-71cc575f28e9": {"doc_hash": "ed2ae998897bbedc387cd9f76e0c4538632540ee21e0a397b4d192f984038478", "ref_doc_id": "33d8918f-b5e4-4267-b4e4-8175517a4814"}, "924efa74-9912-4bf1-a424-e7af30393bc9": {"doc_hash": "264e1d8b0663b8cf75e56b2b67079d3c3472df752f9cc318da28d426dddbb5dc", "ref_doc_id": "d903a57b-ee67-4ff5-a3ea-ca7ea22050bb"}, "577c1398-048e-49da-9027-3e3245e15ccf": {"doc_hash": "7132c4f89fd75f4133ee2927e51aed91e13683ffbbdb0bbc83cf1a5cece4ef85", "ref_doc_id": "4e3553bb-af59-4673-a6b8-5cc60094e499"}, "201021c9-f8ff-440d-bdd8-2003f3765eaa": {"doc_hash": "dd55ef6aa785f358a6b295099b7523f896a9ada78f6a9ec10c6ad21375342c73", "ref_doc_id": "45b0cfb4-07b8-4921-8293-f89216802a9e"}, "26fbf0dc-91ba-485b-9589-edf3afa518c0": {"doc_hash": "a31f6eab10eacb9aafcff577f5788dca0859fbe8736b847ae34e0a6fe4e66ca2", "ref_doc_id": "1c89d447-dd35-4074-b784-c20a07678a10"}, "c88d8623-4857-4de6-9ccf-826395df9d2a": {"doc_hash": "56cae660108d75cf2c738eea9db418bb8c054933b1dc92ca4f086369be07a90d", "ref_doc_id": "ec29f24e-5c62-4dfc-8755-bfa9d3ba886e"}, "cf13fc4b-da75-40b3-ae52-18048a1e11f7": {"doc_hash": "bc05f75661fdbd702d13a4cbe9f5ecf40d8c968b3e366211e303c0b08de0fea4", "ref_doc_id": "442f52e4-6725-41bd-822a-ebda60722cd4"}, "69e02dcb-137f-4d0c-8fc0-4ea885956f50": {"doc_hash": "229230556bf5eeab31d8c465a8b624c4dccd512e821fb9aa60f6a6e8a3477ab4", "ref_doc_id": "d5cb8778-a09c-4a43-ba05-588042fbe0a3"}, "e8015ebd-465f-4496-aef6-5580aeecf4cf": {"doc_hash": "7e92569bff7a81c260bc924fdc571cae526715c5349117b8c8aece32b49ac377", "ref_doc_id": "e9a712eb-6ee9-49d0-8626-92545a16df90"}, "80edff1c-28f5-4414-b5b7-a4507e06838b": {"doc_hash": "0fa5644d47a7eb19dff49df25a22d856a9945e0c7b0d9da301117ea5c7d4d4f2", "ref_doc_id": "516cec03-856f-4324-92db-05dfe7624163"}, "7c130334-5d53-4b12-a938-d967726c3966": {"doc_hash": "15bfb245fafcec8fc46c8aec84b0776b3074ae6d0073560a11f77859acb995c7", "ref_doc_id": "e8c377f3-8948-4388-99a3-d02ffdd4edc8"}, "0688bd15-2836-45df-a186-1c01e81d858d": {"doc_hash": "514336945430557d10b520cd169b5a19e8e863dad8d7857cb8f8a175beb94a71", "ref_doc_id": "4ed55078-1df2-4b03-8507-3cf2d919d7f6"}, "b420acec-31a2-450d-8902-6f09708c48dd": {"doc_hash": "c35607a25d98b2feb87b3241415672647e8f343415653a03a99be44246f52b99", "ref_doc_id": "02683cdf-83f2-4d90-820c-7e5afe0e45da"}, "52f4fdd0-066d-42ad-94f2-dc4a55076af8": {"doc_hash": "499eebb2a6504d83e958606fed1d3673e1c1d9a7262cee22309e7f81b81e0e4f", "ref_doc_id": "911c4817-72fb-47d5-85f9-52976b3af99b"}, "dd5c6664-7b57-414a-8c59-80b9b3c3b5e9": {"doc_hash": "819b69dbea14d8c8b61fd257d97410b57040b004ed064a6db89ea58818ff7268", "ref_doc_id": "d157a39d-bfe2-42cd-b03e-94eb3da17585"}, "7fb1a34e-f7b9-4d69-a5dd-eaa6cd467222": {"doc_hash": "f7a094b9a4deb1a2acf363047db1a1aa84d6d5475c6a28c6dd407decab0fd8c6", "ref_doc_id": "2a5c9090-68f7-429c-a843-e03b123a694a"}, "7e88ef78-c8ff-427a-b3c7-41420978148d": {"doc_hash": "44225fe48b77b67c8e6bbfa30f65a712b28218fdd0c13c3aa0717e6ef9dfe026", "ref_doc_id": "c77c752e-ecda-4b56-a703-e0a9b26b9610"}, "d74d0661-8e21-4ee3-915c-f974bcc0b816": {"doc_hash": "adb5fc0be390c0fd4c79f4eeff81738fa275b8ab9ecd541a6a7e0b9d5a7ac922", "ref_doc_id": "1c581b1b-e52c-4e23-a083-eef141191e06"}, "b4dfdbba-d41f-49b8-a51a-02afd9440228": {"doc_hash": "eb3a1c3babf0a0a0e8a0f57853cd2743a4d2793a894c559a4b3b7e260668cc38", "ref_doc_id": "30852d49-caf9-4ac3-aeea-c3b26137b885"}, "74ee1e11-b6b1-4b5a-8239-17499626bc00": {"doc_hash": "611a5a3b76ae419761d1da1777b9fa03ded14f909e0861b3d101cbd59c204ef4", "ref_doc_id": "a9b36b88-f1ef-42ec-95c2-73605b824ca3"}, "5abad214-b107-47b9-b86d-97193765f4a5": {"doc_hash": "ad934970f6213b79a51d4f2d531fa3ff9f2d69309aa4a39ea627e7d24491b607", "ref_doc_id": "649e3f70-4fb3-4a86-9d1d-050a2b9e3539"}, "e27d941c-1b61-4e04-b0e9-a5beb00e2d1f": {"doc_hash": "42787163df853e4baab4819e946dcd6fa8852db169256d47cea74c3b283332bf", "ref_doc_id": "38e4aff7-eb47-4788-8cc0-6fa17bdbb7f8"}, "61deba78-0591-4cfd-aeeb-e3fbd4c4a6f7": {"doc_hash": "35e18a92cc0aba2376cf3f242399aa4f2070ded611e0e69d1b18bcd18a96ac06", "ref_doc_id": "203fa610-45d8-44b4-9494-a95695790a68"}, "a04e6fe9-7488-42e9-b81a-e47557b725fa": {"doc_hash": "326d3cf3297a70a450988b87777b0d790afe1b89aa078bff857142a4e5527c2e", "ref_doc_id": "8de69e31-7926-49e8-9ee0-21b42e632f57"}, "ee0d49bf-d5eb-49c8-8283-b90a41fd5482": {"doc_hash": "bf23893054cde1f50b0fd49ea3ab1920aaa5746ba9ce3282f1824a46c7b6b421", "ref_doc_id": "69001c19-cdbb-48c5-91d5-960991512791"}, "8f9b11a2-ef31-4cba-9363-f78a0130bc7c": {"doc_hash": "5a1b21d1e196c6a92d8b83e260d4cbfd0713579a0f4be42b8e720a94e8b2eeb4", "ref_doc_id": "8570d3d0-adf2-40f8-b7bf-cd50eab51139"}, "351de9da-d92b-4dff-9215-8fc8968b2b78": {"doc_hash": "110ac14d72a40436970d3a34591c3f09c02f650780444f879056a8a133901ab9", "ref_doc_id": "dc74b21b-f5eb-4e9b-ae19-76e99d2f63da"}, "bec560f8-7972-4d4c-9c0c-de6365dfa02e": {"doc_hash": "97d1a5c8bc04c57b2509d58fbe3d5fd1273482e5fef3d56dad4e1a04b5114510", "ref_doc_id": "f1a6e385-1887-41e1-808d-b333e60d0f2e"}, "670503c8-b147-47c9-9fac-b8951cbd7d29": {"doc_hash": "2ab7cc0af4ea049ed2fe9c7d44f387a5fc7079fe296e1908a882100d9914ab6c", "ref_doc_id": "7f3fdc35-bfb2-4491-a3cf-9637ed19b215"}, "de7800ae-0f0a-4cc8-b7f6-7c476157a871": {"doc_hash": "06d1d043d653d41fd4bc34939c6f04af1c9d8e63c8836a571d4170068430d267", "ref_doc_id": "8baff44d-944e-4e85-b9df-618e0a55d396"}, "805f1f1b-f8cb-4105-9eec-852190e4e845": {"doc_hash": "132b0b1842b8ae2ba804d00dcc2a825afdb5dd2c55e8fb50fe11fbe9474f28b1", "ref_doc_id": "965eac7a-2f52-4f49-a08a-5bc4d2a0089e"}, "cdb797b1-9104-4748-be30-6d9e48d7185f": {"doc_hash": "cf3069bd95668a2328d91ab8af06eb460a47ff5d91f68f13f67177bdf8fff76e", "ref_doc_id": "8dc32287-c4ef-4821-bc7d-a578ddb160d0"}, "fbce6df5-e270-4c01-828f-5db174cdb79a": {"doc_hash": "b98c32aff1f268b80b2dd7b284efb7dc706d3b57026b0c7c1e24827b6efed9d7", "ref_doc_id": "9f2c2cba-3177-44af-ba2f-56ceca941746"}, "e6b009d0-9a61-481e-b393-dca2ce4921e4": {"doc_hash": "04e25ed90efac8eda55dc152e0dd38ef6d66b4791912ca0666028d03a36b40eb", "ref_doc_id": "60bf2fe4-7c0d-4369-b00c-713ab442f52e"}, "2ef2e53a-8433-42d3-af2e-7992de34ca6e": {"doc_hash": "e973366545c41313b7689d97ced8eb3429ccf40aec8a30efe177b5089bb8f1fa", "ref_doc_id": "97d474b4-12f5-490d-bc74-6a61071b595e"}, "a0d53bc0-ef73-4e92-a8d2-dc785221156c": {"doc_hash": "5b76a8c231482a1ba4f0caef5127d376a5f0f2a1e4900a3b4301b62bb51ebe41", "ref_doc_id": "a3107bba-7963-481b-9eb6-96d7fc45d10f"}, "fb2877c7-94e9-4f31-a07f-9582a27346e3": {"doc_hash": "c02b69697124ab7cc34c4cd37b5072d37f70616a13cc352d7bc136c071292952", "ref_doc_id": "73b936e1-993e-4dcc-850e-d739c6459dfb"}, "b360c455-2ba0-4d2d-b2d2-7f13cd83abed": {"doc_hash": "18b698a44813b7398364f19058ec2fb29e13f089dc0cad3bb35c07e57cf82cfc", "ref_doc_id": "11a8b2ea-3717-40f0-8e7a-6f0e68e520c1"}, "bb51bdf6-c53c-429d-8f7f-a65eb14f752c": {"doc_hash": "380c04e07b732f819a79de5db636659f7adfccf5faee8db2a623e358630abf25", "ref_doc_id": "5e183b2c-b341-4b66-8e17-7c9523bea423"}, "ead5e818-694f-44c1-869d-8b62ae120a72": {"doc_hash": "9b5afc3e80b8517405025654045b5021fc56344447cc5c3b785d19817306e0b0", "ref_doc_id": "ead739f4-fc9e-41c5-8b63-b63b79e218b8"}, "bbd3fad0-5b50-4035-9678-15261676dac2": {"doc_hash": "b648ed95dda32d7e2b260e0052866150a576960c4a5bef62f4e5255a4d11b17e", "ref_doc_id": "09a020f7-4ede-4c80-b4a4-3462a8c32a69"}, "200ace01-3df2-46e7-93c7-208b1247382f": {"doc_hash": "8d622f1ebf1fc615d8d0af480cdc70a641c9bec2713370a4bac2d138230433cc", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "0e63265e-2bbf-4647-9bcc-a6b63efddc2b": {"doc_hash": "4b8908aa6d159aaa94dfc008d8a62e09b1b5cb6877bf402fd1e5d6d285446a22", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "efc5c2a2-33b7-4aa8-be6d-8bc03bda6603": {"doc_hash": "c05c0ed7180fa4f8d97634d2493d3beac62f85d747d4b0537fa854b4e4587458", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "befa0904-1484-40fc-8492-c0955e015da3": {"doc_hash": "41e4d8d7b4fdf48af04ddda1d3c9caa2f1c1e70a017d942140977da5e772bc52", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "10d2a5d5-e6b6-45c9-8844-0ac8138f43dc": {"doc_hash": "9044b9df7ddd707936ef77c91e10f24e6324f21179b02c6f1bd02dae23b4f134", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "af7d68c9-9e29-4c94-87a4-0f2606106785": {"doc_hash": "05d3e2d7209c906328c256527ab925a2de5aee520c728753e0ae50f0b409bd0a", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "687104fc-7d3f-4057-bbc7-732b6264187e": {"doc_hash": "47b20479fb38664d4f796c12f6d9a109edec551deeeb3aa1745fbbdba83e9185", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "fe20a7cf-a703-4dd0-8ca2-cacd428a847c": {"doc_hash": "918daa4aefd7a30f2755ff5297b6e8d951c7c1464a66add3e85b58dc86951984", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "0050131e-16c0-45d1-aaaa-c219226e307a": {"doc_hash": "6c68a97777fae0918ffac6e81419b1964a4c687192e68da1164281887691be2a", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "d6b874a1-1388-43ed-b1a0-4ca67856cb47": {"doc_hash": "c529c4b5f1814fcf6f57a746050403fbfa8465eef32e677b9e17e45fc3549635", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "b566240e-b337-4f97-adb2-9f20659a9a2a": {"doc_hash": "0fa588015d59e8774005b809a0e186011d1b7fc3e7d71bfa6f64cef7a8293211", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "b329848d-6fe7-4037-8fd1-a67a4f510e0b": {"doc_hash": "c0f1215ef145bf81d6785fa801b9a31f0cb86b30f06b8b8c67c6261cab270904", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "737b8f51-1f8e-4461-b0d0-74bad119ae7b": {"doc_hash": "cd08e93dd316629e1eac5419daeba0ace318d7ca6174355995093d0dc1810b4c", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "b3f2d1f0-94f0-4883-a26c-33a9c37334d1": {"doc_hash": "891f147fd7d58c811c01542aadde6975158afb3d9f6da1cb18ea21023b6b495a", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "5038b34c-91c5-479c-a249-fd75c7c2c6c7": {"doc_hash": "9813a6e6719b7a5bf92fe9d2e0c4477963dce65b683138e2923f0ed8f5b6b366", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "24a58b37-742a-4307-a21d-d8f6fe324ef2": {"doc_hash": "c9173352a65dab58f852584aabe9ab9ff0306d8b3d4a422ebb1c542bc4f99d1f", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "b625f60a-97d9-4a42-badb-0134d888a125": {"doc_hash": "34426cc8e3f685185243871d01ba7553b0321094b5bd44b5319b7284e024adff", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "23840586-fd6d-47fe-b930-f61bc2fac8bd": {"doc_hash": "04d335d9b76aa153db39bcfe4121ed23b4187b6b8ad373c4014f52298a071601", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "1019a3c4-58de-423b-8e3a-e8baca640a88": {"doc_hash": "5dca88b34b019372256ede2bb898f43b5bcec9d42957d0008a6d3c8eef1996ec", "ref_doc_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2"}, "bc3ce6f3-dbb8-42b5-8bcf-c4e256dc15e0": {"doc_hash": "d637d239ee744611e4ebd182aa4f50a3c307c3496d6ea67a14353be3f3a862b4", "ref_doc_id": "d0f9e178-9328-44c9-a9c5-d30173afcb80"}, "ca31436c-b4a7-4316-a6d4-97454ec2f601": {"doc_hash": "1628ed5cb9283be62275a254ffe37c2848ce0d13bc517d82e4018bf7d1a2758e", "ref_doc_id": "8a83a624-cbd9-4e9a-8275-e8d1cdc2504d"}, "1ea96c52-f39b-4aec-9827-7837ec0c25ba": {"doc_hash": "146a53ffa50b480798a5bb960c6f1857d2f7418a095dc2795114a05e713cc302", "ref_doc_id": "4ed417ee-24dc-4f43-9f4b-ddd540aa3c62"}, "a0ab8381-a7c1-4ed0-93f2-aecdf45d7f89": {"doc_hash": "6e5d1ae7ad983d4d33fa66d78e6b46bb7134ccd24f81415fdcf0073d5abaf8f1", "ref_doc_id": "f8601b34-a3f6-4aac-b2b7-bd0e28d39e2e"}, "57cf304a-593e-498f-9f01-c78faf276b53": {"doc_hash": "42b4165fbea2d2fedf7176cde56d03d826ea7ec43e14ccf35a3d5120e8e42bc1", "ref_doc_id": "81d3317f-c85a-4438-870b-7fd6499f20be"}, "2a4885e5-ca23-49a9-b91d-29b043580083": {"doc_hash": "02edab145204508d08bb3ba0aa2af1d77e90796fb01e4132e2dbf7b2ce76ab0b", "ref_doc_id": "71885c22-edfa-4cab-a0b8-8ca79125148b"}, "3972507d-18dc-4150-9a9c-e5ee3a3371f2": {"doc_hash": "b35315e7c881212a00ebf315899806788ee9b7e1cf8dc2dddcc9809e248245e0", "ref_doc_id": "71885c22-edfa-4cab-a0b8-8ca79125148b"}, "c2c8e238-3506-473d-ab04-a931d1372fac": {"doc_hash": "1050552ee41f542c5b97c0973cb193562586d5548d6d4d566e3ab3e32e703a93", "ref_doc_id": "d8a8e289-624d-40ed-ad2e-2f21a7800aab"}, "bf10d376-9992-479a-8f68-43e6dfea5814": {"doc_hash": "c033fb34dfdbf5622e18538217c869bdf835073e39c1dc8fca12eaf5aaf13992", "ref_doc_id": "8e48d117-71ed-491a-9987-271177f52f8c"}, "ee11557b-001f-4916-9c66-b76ef1fe64c4": {"doc_hash": "c37e271dce3784b3b0257a59c92add11f07c0217319b557d82ec566f644aa094", "ref_doc_id": "8e48d117-71ed-491a-9987-271177f52f8c"}, "99cf0334-81f8-4cb9-b9c4-b529b19753ff": {"doc_hash": "3e7d4d0f4d6e84971d7793a35615a1bc00b79475ee4b2154b5c2203e4e5f2864", "ref_doc_id": "5a9f3b43-5472-4a23-9b0a-865bbc49e593"}, "5baf8a14-3689-44b0-97fb-e351db6138dc": {"doc_hash": "6b5d3764adcf608082b18d63796c60c11c4a77643b9747cacbb7e5777f9061a6", "ref_doc_id": "a32df565-ff56-472b-b469-3a66cf2346e7"}, "74425403-5af4-419c-bf6e-f872b166affa": {"doc_hash": "a84345016a179e1e066a1a32777e167a35291374ad7067d27cb2baa79bc10898", "ref_doc_id": "49b3803d-41d4-4a6a-ae18-6123bae2d7c1"}, "d19dd865-befb-44cb-a692-4f2f521826ab": {"doc_hash": "123a6ac548ced255120a76541cdcf152a23e3f875e78d856cb33ca91c3590d9a", "ref_doc_id": "ceff711f-6c7e-4eaa-b6ca-a819d9d42274"}, "2a8d9a09-2287-4ee3-97c9-69b78bcc0c73": {"doc_hash": "7e197836075c2698b7d2296539029d8ba62f7b1ede11aa667519770d1b1c64c5", "ref_doc_id": "8b8fab11-bb3d-4846-b0d5-df95bbf64188"}, "d50b434a-b14c-4d7b-ab06-a817945c2e2a": {"doc_hash": "2418ee4aad17b6be727b47ebb590527f038f1ee366a9f6d94ed30689d8a4602f", "ref_doc_id": "3a37a87e-e2a6-4e52-bfae-fad329b62253"}, "0ccf524a-ada1-40b0-9c60-5a9dd9ca0c99": {"doc_hash": "0528b977dff9ca5b93f9855ca36293745a2864cbf75525458b36dd57235c3cac", "ref_doc_id": "fd7a66a7-b736-4c0c-96fc-8fcb3f4e8daa"}, "28c98e71-8f78-4ac2-adfe-2c73c26a142c": {"doc_hash": "410b6f9a61dbad18bb09615b45a4ae1905bf18c6495e80d3dd4e304130e8d888", "ref_doc_id": "a1cc418a-9dec-4010-af6d-682770c36972"}, "a51314b8-f718-4c37-9ee0-71025ebb01f4": {"doc_hash": "aa6efadcc5ca39485734b703c960475618b1f73cac932d1557afa56287da25db", "ref_doc_id": "fccb57dc-9085-4279-a6f6-fc4bc935357e"}, "740cbbb1-7130-459b-aa8e-62b6eb2db6b5": {"doc_hash": "5a680c9e962feee92ade1777ae4b4f76554e4972e3172357e604dada57727664", "ref_doc_id": "069d7ba2-5195-4fcf-b1d8-4ca6a67dc6be"}, "d2a6a890-fb12-4da5-b869-ab00dd5ce46c": {"doc_hash": "d576561da021511dd94c618c35934fab3e6f6779dad19bfb80eb2263d9c1099a", "ref_doc_id": "d38fe9e3-d538-44a8-9999-16d53fe55bba"}, "359467a1-3a6a-4e06-99ac-9d1bd434e81b": {"doc_hash": "51d70d5ee00316a306bdce185be502462a42ad103ee3919591b0108c18ae6f42", "ref_doc_id": "34a461ca-98da-4bea-8f7f-b698d088db92"}, "483909a3-d49b-4774-ba88-bf15adccc8a8": {"doc_hash": "8ef54353cd4bfea9b35409dd4449b5071500ff0a7ad2542aceafa95f8bcf498d", "ref_doc_id": "dd9dea52-6cd7-4317-8b98-e66d85735fb3"}, "a733b2cd-a4cf-4f6a-abbb-677bb60dce07": {"doc_hash": "65f5e18b8cb1c79978d132387c644b56d5e9de249b552466129a95eeb5ff6112", "ref_doc_id": "b17daa08-698e-4c9f-98f8-d0bafa4a7a25"}, "53679a8b-9da4-4388-8008-c91d62d019db": {"doc_hash": "70a2b5d20865a7a98bed71b32e81d1e8b4625a87b94e21a9360bc0af9a675718", "ref_doc_id": "84ad9b7c-062b-4ad8-bacb-2d06649e5c43"}, "75dde58b-f15f-43c7-bee9-bcd8ece76e20": {"doc_hash": "f2d63cce9c3d18199c2da154d9cced17cb645722330b1a64fdd39fc5589f6483", "ref_doc_id": "55b00d03-f9db-4c38-b831-fdaad4382d05"}, "43944cff-97d7-4d3d-8b1c-e1b1f06b98b5": {"doc_hash": "0e059f6291ca23db904370e27924ab6f6dee50a504abf4c2e7f0d4a9d8f253b3", "ref_doc_id": "e9744735-0bb2-44ca-b9be-86b6b83eb40f"}, "3efa2c34-0fb3-4b38-b2da-8be179a9adac": {"doc_hash": "f12442e595c5bc9d4491d5f32e4253ed7b9142f32d279ba7fdc7967ca507505d", "ref_doc_id": "b41a6341-0c2f-4240-8ff1-cc663ea4c3da"}, "a0ee8dd5-520e-4c08-9905-6b6e26ac70fb": {"doc_hash": "00ca805212ebdcc692d872f45aa13483ff77c5a232c9904d6bcbc26c55f08eff", "ref_doc_id": "1421d3f5-72fd-4fbd-81bf-586ed9e01170"}, "7c1f43be-dee1-4cc2-b7be-e1f67991dada": {"doc_hash": "3daec6777f53d877170524ea763633b4fa76bbc178e95d46d8ba715f8c096d6a", "ref_doc_id": "bafdfb25-dd1a-4683-8fe6-46b06260fb6c"}, "d6d16aac-8d6a-4946-aff3-cdbd19772b80": {"doc_hash": "6734316ae6211742623c63f34de7cc4ab43d098ea43e1fef440f37943e55787d", "ref_doc_id": "0d967f1b-e3d1-40d3-8e43-2f50fc2fa911"}, "6721c8ca-49f1-4243-9f0f-706f9e8a1b65": {"doc_hash": "fd8975b964d4f720ee57591969371352e0aa2560891b100703112b580a058e36", "ref_doc_id": "1b9b7e67-e900-4c2e-9ad4-e3d64ae07978"}, "984c2e74-7362-483a-831e-7323a0d3d530": {"doc_hash": "abbd5dc271c269f1d3f2ea13b8394994cafdd8a90401251997ea138c2d6dd9d5", "ref_doc_id": "680ac102-b303-47a7-859a-575a2f5a7768"}, "c5aafee5-6a33-4ae3-acfe-95c9f9f356d7": {"doc_hash": "0fc77ec5ea3967b193ddc8bb2a8ac58fd6d3cff3466ac11298822723fa9ff68f", "ref_doc_id": "b5927433-e281-45c8-a0b6-322d8fc8d12a"}, "4c9af740-6f11-4649-b263-a39fa98c313a": {"doc_hash": "3c664eb61060548805cee99302952174c923d980c58fb5c03610a906e7546fef", "ref_doc_id": "98f8ceeb-74d4-481d-8873-77630fbc6e2c"}, "25f7cda3-674d-4e97-aeeb-b37f44bd9ad3": {"doc_hash": "1f8497fda1881fb34adc780531a98775139b90fcc2f75e91bbe9aea02f394f3a", "ref_doc_id": "9cde8e41-afa4-41e8-94c8-9a08dd63ed98"}, "d0f72a88-0750-4886-bac2-706c0d5dcd89": {"doc_hash": "7368aa4e8564673cd72faa6caeeb8fb2a3e72bfb3a0434ceb8642db61ea72f84", "ref_doc_id": "22241a1b-1dd7-443e-b4fd-01deb167b9bf"}, "e958362a-3f02-45c6-b523-78fa1d7dae83": {"doc_hash": "84ee4ae82c3104534c48169edcde4329531b95f0f81de141cb26f04cf669fe9d", "ref_doc_id": "cae4b22a-3da0-4e1c-a38d-5af09b1767c4"}, "43888279-3972-46bf-878a-c81df033fdbf": {"doc_hash": "0d61172e44c5c3f41f982f674b8c9989991b16b5ff4e337cd384715393c6892b", "ref_doc_id": "81187f97-2f18-4c89-b4f4-71dc5e4626f4"}, "8a0814d7-350c-4305-b369-4e3f83efe4b9": {"doc_hash": "0849344f6f98070b529d5e373654a804455fe2de2e7ffd8ffb10a6d165376f83", "ref_doc_id": "5d555947-5187-483d-b39d-4e7196a9a0b7"}, "51b325d9-5c35-439e-96f2-9752189fc8a6": {"doc_hash": "f331254b10725404a9ab1286cd42670234fc01ad58e3141e8541764e5aa96048", "ref_doc_id": "0a79dbc9-ae9a-409d-94c1-3e2e2815242e"}, "66715a49-4571-4ac1-b9df-7f59cc6e1f6c": {"doc_hash": "3030b495d8035729ddf670b04e57c0c045186f6b70e7a0d1e080216fec22e207", "ref_doc_id": "01d004c6-72bb-40c1-9027-cba6150771ef"}, "0af23c4a-6450-4e55-b0d8-1f4930bb2132": {"doc_hash": "457c9ae41428667d15a8720ce46238ff7c932fc42dc5f53509c8b58133454d58", "ref_doc_id": "fc632f57-8a8b-493b-8dd6-51a9ee0531d0"}, "56ae71a9-0910-45b4-803d-22aada52b2a3": {"doc_hash": "96fe29809a836ced195d32450e43a07ce3edf10a165fa9f190157df99176b812", "ref_doc_id": "7e4efd93-738d-4d08-9d15-e21f4da4024f"}, "1089916b-a354-4183-bef4-4bdff68cfd52": {"doc_hash": "ba918cb6339bd624b46d42716eafdcc8f32c271255a15d487b767929e90272af", "ref_doc_id": "aa65c548-98e0-46b0-8b51-41cf140cb22a"}, "c8ebff7a-612e-42f9-86cb-07a0809445f7": {"doc_hash": "0af7afeaca08d2fd0cfa08623873642ca753589a4a0b205fe4dd637cc1709e99", "ref_doc_id": "a18406e6-031a-4eea-a622-1a8c68635e53"}, "8ceb67c1-83b6-4045-a019-ba859b8d0996": {"doc_hash": "f483829572a75bfac3e486617d1644c51625c61757d5a80beb0dbedaeb137ed8", "ref_doc_id": "0d0a39f3-3807-4b99-b75a-cc60dbb5c532"}, "ec6566dd-c689-4d8e-a612-c3d436497d0c": {"doc_hash": "297c6f2bf16fe34c57beddd35981e52e481622064b301b14df7c265806d0fd3b", "ref_doc_id": "3bfce97d-2793-43cc-ac33-1c2186c9ce90"}, "f467e52d-ca7e-44f0-9a6a-71c412d288a4": {"doc_hash": "b79216df7f23dfa3c9006a23c4b7497994c7a9aca0601833e0671d1311f9c4ba", "ref_doc_id": "85c118a5-fda0-4a6e-9e1e-f91a24b1b343"}, "55870a1b-96cf-472e-b24e-51752903aeee": {"doc_hash": "a9797a5708fcfef83ff760c52af4b8fd5a2f8e23d8ed7fb9f3684e7747d2e8d8", "ref_doc_id": "78f99c44-9df4-4d1b-b300-0a6097b616e0"}, "ae4e5e12-c6eb-41ed-8a56-e0ea732402dd": {"doc_hash": "bd14c974e80957fad71ffcc44e68a4fb873d1307294331e628d8d8fae9617045", "ref_doc_id": "20d6ea59-895c-4346-8f32-1287c7edd597"}, "8a096199-a981-4bfc-a46c-469f42b4e472": {"doc_hash": "5ddff0c01789dbe4477d49e868441cd473cba13648adde66b2f89f3027712ddb", "ref_doc_id": "0986dfa3-cb0e-4a25-8dde-060477424f7d"}, "c553789c-385e-41f7-90dd-ff3cc3ddb761": {"doc_hash": "b3580f9ae3a5799028b2f7f0e6a2dfc729c09893014d97a88402b8c70c0fddac", "ref_doc_id": "ee84bfc9-298e-4888-a90c-56f414080368"}, "cdd01298-eca5-4c12-b853-63fe91edb3a6": {"doc_hash": "e53b5f60305640bc334eef180b9efce4e64caae9083437eb5fc4fedd52da6cef", "ref_doc_id": "d614e1af-3b7a-40b6-a458-6caff78059c5"}, "e102e157-a711-4481-966a-9bf46c7290d8": {"doc_hash": "cd32645026d4fcd0de9ebb648b3dd23eaf92110373b8390f416420bf5a704b0b", "ref_doc_id": "cf462911-593f-43c8-8d16-eefecd7573a4"}, "5b07dfb1-4be9-4756-9412-87986d0a8d14": {"doc_hash": "f1b88454e16f4add2b2c58bc3c48aa16ae14b808f682587ccf12842413f2bc8a", "ref_doc_id": "4d70853d-8305-4aab-9b57-d4f225d2ff3c"}, "bfccf24c-8f6b-4c8a-bca9-bf4936af3f3b": {"doc_hash": "207a863a5cdd534920af4014fcd07181490434a1ef8985d7c9482886e74b1485", "ref_doc_id": "613fdbe9-48fa-41f7-ad2b-1ec746c3b5f2"}, "8a350eb6-56d2-4961-b178-af7f1b83c984": {"doc_hash": "d67a3c401e79817438d258e17382962fe47b547a551ba15462fcce97577bd077", "ref_doc_id": "8c415403-83cb-46a0-9100-adb46a5cefe8"}, "ef25f0fc-8f31-43a3-9d60-5e4e3451cfb1": {"doc_hash": "8bccf941079f178593ed45db5d6d5aa812f40aa44d7c86fc375403fd70169221", "ref_doc_id": "de12d501-d31f-4061-b714-9998c95b4347"}, "87801a5d-00b4-4797-9dc2-ce76531d3549": {"doc_hash": "cece6e1a9bb9ca1e3cf6ec7b70345d71c032b201b5ca1510c1c36c54d2b5c8f4", "ref_doc_id": "4fe71221-fba0-414f-a43d-b6963c49b21b"}, "48fa2dcd-2723-4fc0-8e65-5091e71e00ab": {"doc_hash": "4bab6e181c1ff23b150e7a5d74c7dfa642e111ded14d5c570edf5058392f457e", "ref_doc_id": "0d9e2ccd-9f8c-4af7-ad50-61e64905b415"}, "80a4fdd4-29c2-4268-953e-311f96306bee": {"doc_hash": "5675fd5b1cb24d6d34a8cdea54abeecd40ccd858ad8add83dd67e7285863c96b", "ref_doc_id": "b16e0e6e-df64-4dbf-b2f3-618029aa7cf3"}, "afa7f8dc-1941-423d-b661-e117863bcd8f": {"doc_hash": "21736224772a0b2dc8aedd33106446c615c31b0577fe56c85f8ac7145e048be1", "ref_doc_id": "b7ab3ceb-563c-4913-9464-4179fe848687"}, "efe94952-b0e1-4aca-83c9-2e9dcadad8be": {"doc_hash": "83fe0529761954ae991592b36680954f39aa08f10668332ae948ea44aaf57288", "ref_doc_id": "7408c28e-615f-4601-8770-be762f23a934"}, "f0561b9e-2be3-4814-a2e1-a980bd9a590d": {"doc_hash": "329d03cf0ffc0ec2300381e38f343bcfd239fa16ad8814e02d70687f4d4f89b5", "ref_doc_id": "fa224d56-8f1d-40c3-a7ee-63f70e65b5d8"}, "5760f215-dfce-4ef9-8b8e-f578a9e71355": {"doc_hash": "8710b35d47787e8e3d99ef1642efa5213599ac940fa1629f3d64ecefe85211f3", "ref_doc_id": "77a812ff-dd68-4700-afc9-5e591bcc95d8"}, "45eddd57-37dd-4074-8186-317239ca08c6": {"doc_hash": "dba7e42e8948093f49b8cf45c7d395ee498be78967424570bd6782009d0c46e1", "ref_doc_id": "24b0d051-5e56-4af0-b663-04178fd008aa"}, "087b5862-ca70-4e63-bd4a-ed45884347b0": {"doc_hash": "b5f8ac15d114376d1fdc8ba0f525c67f4a7856a5de0bce9a032242cd011d0602", "ref_doc_id": "a026c818-cec2-4271-a184-538f202b1587"}, "4cbbc670-2b34-47fc-8ede-1a810936cfd5": {"doc_hash": "2306313a2a22e58d0b637d486eed4a530f5afcdda265513e99e3e7f4a6b4deda", "ref_doc_id": "7722b446-8976-43f2-91f5-30fe6c14a7cb"}, "cfc559de-ab39-4341-b488-7672dc17ddd2": {"doc_hash": "9f150884f6686db2674a43c01c1af4f5beaab3ffaedf24f47a69e2f9adfd2d4a", "ref_doc_id": "50c71383-445f-476a-9e13-313051bb71f6"}, "5a27f2de-e70f-4b35-a538-af6e3f6285fd": {"doc_hash": "fda9f0e93d884d2f3f454ec3b9dfa560ccd1b3dbf855399898fb0706ce34f8e9", "ref_doc_id": "7e76d3e2-ec80-47c6-b548-8057b2f7a0d1"}, "7b7a67c7-4d05-490f-9db8-c7ebc2e75ca9": {"doc_hash": "14dc47ce1464450f191107b8bf9aadecc19a62f05bfe2003dc2ffb26bf4ef059", "ref_doc_id": "e06707f3-429c-4756-9acf-009249f34c31"}, "a3dd2cd3-0092-466d-9e01-8cf9ca19dc6d": {"doc_hash": "42a78835c3c32d6a639246eb373ed1b4d2be06783552ec5a6fa619e91ee485f1", "ref_doc_id": "293fb481-66fd-43a0-a9b1-239ccef84484"}, "a8aed61a-6b49-417f-98bc-13706f0152d2": {"doc_hash": "3a29436e1d5e852e099b0a80bb1318511d09d383c5527497f275d311b31db4f8", "ref_doc_id": "93148f7d-ab81-4775-9ecd-fe878379d8e0"}, "c1921b77-d928-4524-9ac2-4a2a7ca9a906": {"doc_hash": "0d2fb1a0469ba1a4494891354e6417e185593169cde2801526f1d7bb240cda5a", "ref_doc_id": "b4f2862f-a9ad-4c94-8737-2e7a049d87bc"}, "75e48af6-52c5-466b-9be1-c4414c4d3dca": {"doc_hash": "5c655c03e20ed33d7276b80e517c21a8c0d42291d35e04d715dd0374d956f986", "ref_doc_id": "84658b36-c79b-4469-ac90-00490d4aa9be"}, "fa73889b-0128-48e5-83ab-4cdf51227757": {"doc_hash": "5ca12008610f4cd56ddd3f74aa517585e308c75c8e71f2f5ee254483d782bf03", "ref_doc_id": "d10ffb11-6f31-4e99-a55f-cfae9cf20e92"}, "e73d7424-6bef-41f2-a14a-2a58b8910b2a": {"doc_hash": "a175125023427cc28b325da7bb8089bcb6face92ba9cf2ebac0dcc53169f8a8a", "ref_doc_id": "9c058290-79b4-44af-b517-d4454d585c7a"}, "a5a300a4-e068-420a-9a32-c516d43be820": {"doc_hash": "5b1fc255e5edcb16ab8e1fa2fc7be51fcb2a4bc6f11cca53295ce145e6a9ed61", "ref_doc_id": "928a1d11-0935-401b-bdb1-58fb2fc1ef99"}, "6766c844-4fdb-42dc-9416-eb8d22554a64": {"doc_hash": "9ab3487ead2761a04b53cf760d3e37877cc4976dc26912baad98fd11790b8d6e", "ref_doc_id": "34d53bdf-a177-43b0-9b0a-582685b6d51e"}, "96fb6cb1-3969-4d13-952c-f51d04272e1f": {"doc_hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "ref_doc_id": "50d1950c-cc88-4265-94e0-7cfc604577a1"}, "be5a4eba-9ce2-434a-89c1-d536d8b9e163": {"doc_hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "ref_doc_id": "50d1950c-cc88-4265-94e0-7cfc604577a1"}, "146d0616-b5d5-43f0-afcf-aa385ba1c15e": {"doc_hash": "e4284999019d8babe84c667d274b808f42360bf813fc13cbcfa2cc53b21afe6d", "ref_doc_id": "50d1950c-cc88-4265-94e0-7cfc604577a1"}}, "docstore/data": {"d2e509ab-4d49-4c7d-902e-0cd5579d42db": {"__data__": {"id_": "d2e509ab-4d49-4c7d-902e-0cd5579d42db", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "55405485-42c0-436f-b31c-3a0aafe29f33", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5ffd0e4cca5691ce796a30522b6bb5818c783da7d1353965184549646d441fbb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1048070c-750f-46b1-8c77-653c1e8bf307", "node_type": "1", "metadata": {}, "hash": "92b400f362dc31e38786954fe3394c1c2a6db6f7a841deb25c21d490be49402c", "class_name": "RelatedNodeInfo"}}, "hash": "18a53bb72eca73c6378167be729ec75a3025f7fd68b8d21ccc9bb501b79ad949", "text": "Annotating Your Data\n\n\n```python\nimport holoviews as hv\nhv.extension('bokeh')\n```\n\nAs introduced in the Getting Started guide, HoloViews relies heavily on semantic *annotations*, i.e., metadata you declare that lets HoloViews interpret what your data represents. With these annotations, HoloViews can perform complex tasks like visualization automatically.\n\nThere are three main kinds of annotation that can be associated with each element:\n 1. **Type**, used to declare the sort of data you have, which is required before it can be visualized,\n 2. **Dimensions**, used to specify the abstract space in which the data resides, allowing axis labeling and indexing, and\n 3. **Group/Label**, used to declare a meaningful category and human-readable description of the element, allowing plot labeling and selecting related sets of elements.\n\nThis user guide explains each of these three types of annotation, describing why you would need or want to use them.", "start_char_idx": 2, "end_char_idx": 960, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1048070c-750f-46b1-8c77-653c1e8bf307": {"__data__": {"id_": "1048070c-750f-46b1-8c77-653c1e8bf307", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c2164602-45b9-4aad-8d2e-3c2fa8d73647", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f8b72b30ecf46ce49d57f1b1fa4498a489d5e1f181a8c574c5c8aa57cb880853", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d2e509ab-4d49-4c7d-902e-0cd5579d42db", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "18a53bb72eca73c6378167be729ec75a3025f7fd68b8d21ccc9bb501b79ad949", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ad879b28-1d5e-4062-aaae-0301cf15d6fa", "node_type": "1", "metadata": {}, "hash": "8dbc7d7fc4810a350bebd6dac5705b7dd0f38c3239ddc478173e0ab892d19790", "class_name": "RelatedNodeInfo"}}, "hash": "92b400f362dc31e38786954fe3394c1c2a6db6f7a841deb25c21d490be49402c", "text": "1. Specifying element type\n\nBasic Python data structures like dataframes, arrays, lists, and dictionaries can be used to represent an infinite variety of different types of data, and thus they cannot be visualized as any particular type of graphical representation without some additional information from the user that says what sort of data it is meant to be. The user can declare this information by selecting a suitable HoloViews element type from the many different ones available (see the Reference Gallery). \n\nFor instance, let's say you have two lists of numbers:\n\n\n```python\nxs = range(-10,11)\nys = [100-x**2 for x in xs]\n```\n\nAs far as Python is concerned, ``xs`` and ``ys`` are just two arbitrary lists, which could represent nearly anything imaginable. But we as humans can see that each of the ``ys`` is a value computed from one of the ``xs`` by evaluating the function $y=100-x^2$. We can convey some of that information to HoloViews by choosing a ``Curve`` element type, which is a convenient shorthand for \"a discrete set of real-valued samples from a continuous function of one real-valued variable\":\n\n\n```python\ncurve = hv.Curve((xs, ys))\ncurve\n```\n\nAs you can see, declaring the element type is the only *required* bit of annotation, instantly making your data visualizable. However, this initial visualization relies on various defaults that may not be appropriate for your data, and you can override these defaults by declaring additional annotations as described below.", "start_char_idx": 2, "end_char_idx": 1498, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ad879b28-1d5e-4062-aaae-0301cf15d6fa": {"__data__": {"id_": "ad879b28-1d5e-4062-aaae-0301cf15d6fa", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cb376bbf-00da-45c1-ad22-e9da3190b470", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "15bf6f9ad88fb92bec5aa1a43e86111b6da767883c1b23e740eab0126237f411", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1048070c-750f-46b1-8c77-653c1e8bf307", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "92b400f362dc31e38786954fe3394c1c2a6db6f7a841deb25c21d490be49402c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a8809711-309e-4672-b940-44c8e2716efd", "node_type": "1", "metadata": {}, "hash": "052c1e7938a60a73f2aee73d0033dc11964d01f98e42c5c3f2444aad23af13f1", "class_name": "RelatedNodeInfo"}}, "hash": "8dbc7d7fc4810a350bebd6dac5705b7dd0f38c3239ddc478173e0ab892d19790", "text": "2. Specifying element dimensionality\n\nEach element type can process a certain number and type of *dimensions*, i.e., ways in which the data can vary. For instance, the ``Curve`` object above has two dimensions, $x$ and $y$. If you look at how we generated the data, you can see that these two dimensions are semantically different -- we chose an arbitrary set of values for the ``xs``, and then calculated a corresponding value to make each of the ``ys``. In mathematical terms, $x$ is thus an independent variable (selected by the creator of the data), and $y$ is a dependent variable (typically measured or calculated from the independent variable(s)).\n\nHoloViews elements call these two different types of variables *key dimensions* (``kdims``) and *value dimensions* (``vdims``). The *key dimensions* are the dimensions you can index *by* to get the values corresponding to the *value* dimensions. You can learn more about indexing data in the later Indexing and Selecting Data user guide.\n\nDifferent elements have different numbers of required key dimensions and value dimensions. For instance, a ``Curve`` always has one key dimension and one value dimension. As we did not explicitly specify anything regarding dimensions when declaring the curve above, the ``kdims`` and ``vidms`` use their default names 'x' and 'y':\n\n\n```python\n\"Object 'curve' has kdims {kdims} and vdims {vdims}\".format(kdims=curve.kdims, vdims=curve.vdims)\n```\n\nThe easiest way to override the default dimension names is to provide strings for the dimensions, where the second argument in the Element constructor will always be the ``kdims``, and the third will always be the ``vdims``:\n\n\n```python\ntrajectory = hv.Curve((xs, ys), 'distance', 'height')\ntrajectory\n```\n\n\n```python\n\"Object 'trajectory' has kdims {kdims} and vdims {vdims} \".format(kdims=trajectory.kdims, vdims=trajectory.vdims)\n```\n\nWe can see that the strings we provided have been 'promoted' to dimension objects. The ``kdims`` and ``vdims`` *always* contain instances of the ``Dimension`` class, described in the following section. Here, the immediate effect is to use the new names for the displayed axis labels.", "start_char_idx": 2, "end_char_idx": 2168, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a8809711-309e-4672-b940-44c8e2716efd": {"__data__": {"id_": "a8809711-309e-4672-b940-44c8e2716efd", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "75499e0b-f963-4ee5-b3f9-2bc40101d3e2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ed8e8b913be826455cd000f5a068b0669fbd2cc11c1458dd3a44994de1de912f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ad879b28-1d5e-4062-aaae-0301cf15d6fa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8dbc7d7fc4810a350bebd6dac5705b7dd0f38c3239ddc478173e0ab892d19790", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2c1991a3-1a31-4e59-810b-013cc5c984cb", "node_type": "1", "metadata": {}, "hash": "ab8245e1ddf02f16baeab33289e4d4106057223a035e325c0f9a54dcd92e62c1", "class_name": "RelatedNodeInfo"}}, "hash": "052c1e7938a60a73f2aee73d0033dc11964d01f98e42c5c3f2444aad23af13f1", "text": "Dimension parameters\n\n``Dimensions`` are not just names, they are rich objects with numerous parameters that can be used to describe the space in which the data resides. Only two of these are considered *core* parameters that uniquely identify the dimension object; the rest are auxiliary metadata. The most important parameters are:\n\n\n\n name(core) A concise name for the dimension, which for convenient usage as a keyword argument should usually be a legal Python identifier.\n label (core) A optional longer description of the dimension, which is convenient if you want the displayed label to contain arbitrary spaces, symbols, or unicode.\n range The minimum and maximum allowable values for the dimension, for error checking and generating widgets when needed.\n soft_range Suggested minimum and maximum values within the allowed range, used to specify a useful portion of the range for widgets and animations.\n step Suggested interval for sampling a continuous range, if needed for a widget or animation.\n unit The name of the unit to be associated with the dimension, if any, for labelling.\n values Explicit list of allowed dimension values, for error checking, widgets, and animations.\n\n\n\nFor the full list of parameters, you can call ``hv.help(hv.Dimension)``.\n\nSimilar to how you can just use a string if all you want to specify is the name, you can provide a ``(name,label)`` tuple if you want to specify the ``name`` and the ``label`` to ``kdims`` and ``vdims`` without building an explicit ``Dimension``:\n\n\n```python\nwo_unit = hv.Curve((xs, ys), \n ('distance','Horizontal distance'), \n ('height','Height above sea level'))\n\ndistance = hv.Dimension('distance', label='Horizontal distance', unit='m')\nheight = hv.Dimension(('height','Height above sea level'), unit='m')\nwith_unit = hv.Curve((xs, ys), distance, height)", "start_char_idx": 2, "end_char_idx": 1870, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2c1991a3-1a31-4e59-810b-013cc5c984cb": {"__data__": {"id_": "2c1991a3-1a31-4e59-810b-013cc5c984cb", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f09dda05-763b-4f40-9047-da306c58a828", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "399716f836e69abfd590935e39b1eccfa0dabb74e052d274b468438bf7c1cea5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a8809711-309e-4672-b940-44c8e2716efd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "052c1e7938a60a73f2aee73d0033dc11964d01f98e42c5c3f2444aad23af13f1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d1fd9238-a103-4c5a-bca2-b4fa0f2d6b59", "node_type": "1", "metadata": {}, "hash": "b98cb63b349df442aaa531e1129ddfcdf38e914cc917b0e6045dab828272fe6b", "class_name": "RelatedNodeInfo"}}, "hash": "ab8245e1ddf02f16baeab33289e4d4106057223a035e325c0f9a54dcd92e62c1", "text": "(using + to compose elements is described in the next guide)\nwo_unit + with_unit\n```\n\nNote that after supplying the longer labels, you can still use the short name to specify the dimension in keyword arguments. For instance, try using ``with_unit.select(distance=(5,8))`` in the cell above.", "start_char_idx": 2, "end_char_idx": 292, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d1fd9238-a103-4c5a-bca2-b4fa0f2d6b59": {"__data__": {"id_": "d1fd9238-a103-4c5a-bca2-b4fa0f2d6b59", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2956f9de-5058-46dc-98b1-87fb1f14512f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8334e4f527b1cf01dd65ceed1755256c12fa5b8c3fdaac950906e41eb0e7224b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2c1991a3-1a31-4e59-810b-013cc5c984cb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ab8245e1ddf02f16baeab33289e4d4106057223a035e325c0f9a54dcd92e62c1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dd0917a0-7eb7-44e2-b484-52900d3cee15", "node_type": "1", "metadata": {}, "hash": "a56e7876b2532183e21ff00e2ecd8e69d4f42078ea0d7bae81d9a39778a023e2", "class_name": "RelatedNodeInfo"}}, "hash": "b98cb63b349df442aaa531e1129ddfcdf38e914cc917b0e6045dab828272fe6b", "text": "Setting properties with redim\n\nDeclaring dimension objects with appropriate parameters can be awkward and verbose if you only want to set a few specific parameters. You can often avoid declaring explicit dimension objects using the ``redim`` method, which returns a *clone* of the element: the same data, wrapped in a new instance of the same element type with the new dimension settings.\n\nLet's use ``redim`` to swap out the 'height' dimension for an 'altitude' dimension:\n\n\n```python\nrenamed_height = trajectory.redim(height='altitude')\nrenamed_height\n```\n\nThe ``redim`` \"method\" is actually a utility that can be used to set any of the dimension parameters, such as the label, unit, range, or values. For instance, the label can be updated on an existing object by specifying the dimension name and then the new value for that parameter:\n\n\n```python\nrenamed_height.redim.label(altitude='Altitude above sea-level', distance='Horizontal distance')\n```", "start_char_idx": 2, "end_char_idx": 955, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dd0917a0-7eb7-44e2-b484-52900d3cee15": {"__data__": {"id_": "dd0917a0-7eb7-44e2-b484-52900d3cee15", "embedding": null, "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "044b361e-9c5e-4bfb-9543-91420862c382", "node_type": "4", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a28fe96233cbd8e22cd3d2fafe4b64f6c02bdc0f68842ff2ae306757a3528687", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d1fd9238-a103-4c5a-bca2-b4fa0f2d6b59", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b98cb63b349df442aaa531e1129ddfcdf38e914cc917b0e6045dab828272fe6b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "02aea1ac-3ade-4251-8772-816d8f812e46", "node_type": "1", "metadata": {}, "hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "class_name": "RelatedNodeInfo"}}, "hash": "a56e7876b2532183e21ff00e2ecd8e69d4f42078ea0d7bae81d9a39778a023e2", "text": "3. Organizing your elements with groups and labels\n\nA complex visualization you build with HoloViews may include many instances of the same element type, each built from different bits of data and potentially representing categorically distinct types of information to you. To help you keep track of these distinctions when you need to, HoloViews provides a ``group`` parameter you can use to declare semantically distinct categories for elements, and a ``label`` parameter you can use to identify which specific item the element represents within that category:\n\n\n```python\nlow_ys = [25-(0.5*el)**2 for el in xs]\nshallow = hv.Curve((xs, low_ys), group='Trajectory', label='Shallow')\nmedium = hv.Curve((xs, ys), group='Trajectory', label='Medium')\nshallow + medium\n```\n\nAs you can see, the ``group`` and ``label`` information will be used to generate sensible titles, here indicating that both sets of data represent trajectories, and that there are two different specific trajectories being shown. Once the group and/or label have been specified, they can be used for Applying Customization (e.g. to make all trajectories have the same line width and style, or to customize one particular plot out of many of the same type). The group and label are also used for indexing, as we will see in the following Composing_Elements guide.", "start_char_idx": 2, "end_char_idx": 1336, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "02aea1ac-3ade-4251-8772-816d8f812e46": {"__data__": {"id_": "02aea1ac-3ade-4251-8772-816d8f812e46", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "526ee412-22f6-42ff-8e69-01cc4d9fe0d8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8104fb248d29d01612d04daecdbd0dc06804f0ccadf4490b02b492f46db7e84c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dd0917a0-7eb7-44e2-b484-52900d3cee15", "node_type": "1", "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a56e7876b2532183e21ff00e2ecd8e69d4f42078ea0d7bae81d9a39778a023e2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1c473438-4758-4314-a28f-e75b07c9d790", "node_type": "1", "metadata": {}, "hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "class_name": "RelatedNodeInfo"}}, "hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "text": "Composing Objects\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nhv.extension('bokeh')\n```\n\nInstantly viewable HoloViews objects include elements (discussed already) and containers (collections of elements or other containers). Here we'll introduce two types of containers for collecting viewable objects, each typically created from the existing objects using a convenient operator syntax:\n\n 1. ** ``Layout`` (``+``):** A collection of any HoloViews objects to be displayed side by side. \n 2. **``Overlay`` (``*``):** A collection of HoloViews objects to be displayed overlaid on one another with the same axes.\n\nThe Layout and Overlay containers allow you to mix types in any combination, and have an ordering but no numerical or categorical key dimension with which to index the objects. In contrast, the Dimensioned containers discussed later, such as ``HoloMap`` , ``GridSpace``, ``NdOverlay``, and ``NdLayout``, do not allow mixed types, and each item has an associated numerical or categorical index (key).\n\nBecause you can compose a mix of any HoloViews elements into layouts and overlays, these types of container are very common, which is why they have dedicated composition operators. This user guide describes how you can build and organize your data using these two types of composition.\n\nTo show how layouts and overlays work with heterogeneous types, we will use these two elements throughout this notebook:\n\n\n```python\nxs = [0.1* i for i in range(100)]\ncurve = hv.Curve((xs, [np.sin(x) for x in xs]))\nscatter = hv.Scatter((xs[::5], np.linspace(0,1,20)))\n```", "start_char_idx": 2, "end_char_idx": 1590, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1c473438-4758-4314-a28f-e75b07c9d790": {"__data__": {"id_": "1c473438-4758-4314-a28f-e75b07c9d790", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "03dbd0f1-3bf3-47f3-a603-07fed9856cbf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e378621e8809c8c91604022a76b93c8db2fdc9e9a43649dbfb7f4226d23995e4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "02aea1ac-3ade-4251-8772-816d8f812e46", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "87c133e3913209eab6207a69d7a1bc39334c02b51bbd7794a0f042328d6e8204", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "895c3402-30a2-4b1f-8398-c4d8f3a152c0", "node_type": "1", "metadata": {}, "hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "class_name": "RelatedNodeInfo"}}, "hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "text": "1. ``Layout``\n\nA ``Layout`` can contain any HoloViews object except an ``NdLayout``. (See Building Composite Objects for the full details about the ways containers can be composed.)\n\nYou can build a ``Layout`` from two or more HoloViews objects of any type by using the ``+`` operator:\n\n\n```python\ncurve + scatter\n```\n\nIn this example, we have a ``Layout`` composed of a ``Curve`` element and a ``Scatter`` element, and they happen to share the same ``x`` and ``y`` dimensions.", "start_char_idx": 2, "end_char_idx": 479, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "895c3402-30a2-4b1f-8398-c4d8f3a152c0": {"__data__": {"id_": "895c3402-30a2-4b1f-8398-c4d8f3a152c0", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b379edd3-aa54-4f7f-b203-4275d6e084be", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4563b8755da8ae4c315a4f75e04774f4cfd2b50b595c0b12b89d2b0bff6670f7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1c473438-4758-4314-a28f-e75b07c9d790", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "221a3fdd3761371f295c0b3538d5974cda4194ca3edde3a3a822126805c4ca46", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8fedda13-845a-40df-b698-350443926c6c", "node_type": "1", "metadata": {}, "hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "class_name": "RelatedNodeInfo"}}, "hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "text": "Building a ``Layout`` from a list\n\nIf the ``+`` syntax is not convenient, you can also build a ``Layout`` using its constructor directly, which is useful if you want to create a ``Layout`` of an arbitrary length:\n\n\n```python\ncurve_list = [hv.Curve((xs, [np.sin(f*x) for x in xs])) for f in [0.5, 0.75]]\nscatter_list = [hv.Scatter((xs[::5], f*np.linspace(0,1,20))) for f in [-0.5, 0.5]]\n\nlayout = hv.Layout(curve_list + scatter_list).cols(2)\nlayout\n```\n\nNote the use of the ``.cols`` method to specify the number of columns, wrapping to the next row in scanline order (left to right, then top to bottom).", "start_char_idx": 2, "end_char_idx": 607, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8fedda13-845a-40df-b698-350443926c6c": {"__data__": {"id_": "8fedda13-845a-40df-b698-350443926c6c", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7b2fe83b-b9b5-486e-8cfe-d8b0779ceb54", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0623efcd74c73dcb9c9d5a55890e66e4934637ad74ac2ee820ef01c7ed75d7f7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "895c3402-30a2-4b1f-8398-c4d8f3a152c0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "231e189af0cceb75b01ad6ba62f5ba33444c1975f502fb31b4d2309e005313a4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dea85efb-9113-43b1-9c54-f0fe32af8c8d", "node_type": "1", "metadata": {}, "hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "class_name": "RelatedNodeInfo"}}, "hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "text": "A ``Layout`` has two-level attribute access\n\n``Layout`` and ``Overlay`` are tree-based data structures that can hold arbitrarily heterogeneous collections of HoloViews objects, and are quite different from the dictionary-like dimensioned containers (which will be described in later guides).\n\nAs mentioned previously in Annotating Data, HoloViews objects have string ``group`` and ``label`` parameters, which can be used to select objects in the ``Layout`` using two-level attribute access. First let us see how to index the above example, where the ``group`` and ``label`` parameters were left unspecified on creation:\n\n\n```python\nprint(layout)\n```\n\nAs you can see, the ``layout`` object consists of four different elements, each mapping from ``x`` to ``y``. You can use the \"dot\" syntax shown in the repr to select individual elements from the layout:\n\n\n```python\nlayout2 = layout.Curve.I + layout.Scatter.II\nlayout2\n```\n\nHere we create a second layout by indexing two elements from our earlier ``layout`` object and using ``+`` between them. We see that the first level of indexing is the ``group`` string (which defaults to the element class name) followed by the label, which wasn't set and is therefore mapped to an automatically generated Roman numeral (I,II,III,IV, etc.). \n\nAs group and label were again not specified, our new ``Layout`` will also use ``Curve.I`` for the curve, but as there is only one scatter element, it will have ``Scatter.I`` to index the scatter:\n\n\n```python\nlayout2.Scatter.I\n```", "start_char_idx": 2, "end_char_idx": 1515, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dea85efb-9113-43b1-9c54-f0fe32af8c8d": {"__data__": {"id_": "dea85efb-9113-43b1-9c54-f0fe32af8c8d", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0a54e6df-ad0a-41d5-bb73-b899c6c66552", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bb551a98b080bbc0d34f1bfd6bf4e61c20c4401860476c832119c93d8956ed5a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8fedda13-845a-40df-b698-350443926c6c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c717fd56fb9735997ae4a8bbce3ee9f7a3ee7727a63bfa454ee2ee6a0d3ca762", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fc12489c-6756-4645-ab7e-a81be33d282d", "node_type": "1", "metadata": {}, "hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "class_name": "RelatedNodeInfo"}}, "hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "text": "Using ``group`` and ``label`` with ``Layout``\n\nNow let's return to the first simple layout example, this time setting a group and label as introduced in the Annotating Data guide:\n\n\n```python\nxs = [0.1* i for i in range(100)]\n\nlow_freq = hv.Curve((xs, [np.sin(x) for x in xs]), group='Sinusoid', label='Low Frequency')\nlinpoints = hv.Scatter((xs[::5], np.linspace(0,1,20)), group='Linear Points', label='Demo')\n\nlabelled = low_freq + linpoints\nlabelled\n```\n\nAs you can see, the group and label are used for titling the plots. They also determine how the objects are accessed:\n\n\n```python\nlabelled.Linear_Points.Demo + labelled.Sinusoid.Low_Frequency\n```\n\nYou are encouraged to use the group and label names as appropriate for organizing your own data. They should let you easily refer to groups of data that are meaningful to your domain, e.g. for Applying Customizations.", "start_char_idx": 2, "end_char_idx": 885, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fc12489c-6756-4645-ab7e-a81be33d282d": {"__data__": {"id_": "fc12489c-6756-4645-ab7e-a81be33d282d", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "82782577-f92e-48ff-91a0-1df9646a035d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e38f9c822c6550c31b6bb2a1f0f1431b62f13d201c1368d408ac89ea5770b74f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dea85efb-9113-43b1-9c54-f0fe32af8c8d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ede416dd00de3e9f16680663be4c69b6394f96dccd92c7f083321ba2acf984bd", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "68258680-03fe-47da-b09d-68a1edc046dd", "node_type": "1", "metadata": {}, "hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "class_name": "RelatedNodeInfo"}}, "hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "text": "2. ``Overlay``\n\nAn ``Overlay`` can contain any HoloViews elements, but the only container type it can contain is ``NdOverlay``. Building Composite Objects provides the full details on how containers can be composed.\n\nOther than being composed with ``*`` and displaying elements together in the same space, ``Overlay`` shares many of the same concepts as layout. The rest of this section will show the overlay equivalents of the manipulations shown above for layout. \n\nFirst, composition with ``*`` instead of ``+`` results in a single overlaid plot, rather than side-by-side plots:\n\n\n```python\ncurve * scatter\n```", "start_char_idx": 2, "end_char_idx": 615, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "68258680-03fe-47da-b09d-68a1edc046dd": {"__data__": {"id_": "68258680-03fe-47da-b09d-68a1edc046dd", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9db166f4-1576-4cd0-a107-021ab5c6f079", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cbff0c9ccffe20aff6613ed617f9ff6ef22d719f033216117a78eb3ae499e5c3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fc12489c-6756-4645-ab7e-a81be33d282d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d74f571f007b4b311460ec3cc490ae545575dac3321c13389f2ba4deb4f8105a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0b969a3c-509b-4307-b7fe-4648820a3dfc", "node_type": "1", "metadata": {}, "hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "class_name": "RelatedNodeInfo"}}, "hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "text": "Building ``Overlay`` from a list\n\nAn ``Overlay`` can be built explicitly from a list, just like a ``Layout``:\n\n\n```python\ncurve_list = [hv.Curve((xs, [np.sin(f*x) for x in xs])) for f in [0.5, 0.75]]\nscatter_list = [hv.Scatter((xs[::5], f*np.linspace(0,1,20))) for f in [-0.5, 0.5]]\noverlay = hv.Overlay(curve_list + scatter_list)\noverlay\n```\n\nAs you can see, a special feature of ``Overlay`` compared to ``Layout`` is that overlays use *color cycles* to help keep the overlaid plots distinguishable, which you can learn about in Applying Customization.", "start_char_idx": 2, "end_char_idx": 557, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0b969a3c-509b-4307-b7fe-4648820a3dfc": {"__data__": {"id_": "0b969a3c-509b-4307-b7fe-4648820a3dfc", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "282b2871-1166-4e41-8a04-4fa2250ce637", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cd908eb49ec90e12a443127d3f2ac442bb706828699cc810d8c3d0cdd52e2e2b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "68258680-03fe-47da-b09d-68a1edc046dd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f4d7f37777b1a2384b7ede43110fe27530db24422939d6b3cc4c673f1f996441", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f9673153-8629-40a7-b6e5-7b4741532922", "node_type": "1", "metadata": {}, "hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "class_name": "RelatedNodeInfo"}}, "hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "text": "``Overlay`` also has two-level attribute access\n\nLike ``Layout``, ``Overlay`` is fundamentally a tree structure holding arbitrarily heterogeneous HoloViews objects, unlike the dimensioned containers. ``Overlay`` objects also make use of the ``group`` and ``label`` parameters, introduced in Annotating Data, for two-level attribute access.\n\nOnce again, let us see how to index the above example where the ``group`` and ``label`` parameters were left unspecified:\n\n\n```python\nprint(overlay)\n```\n\n\n```python\noverlay.Curve.I * overlay.Scatter.II\n```\n\nHere we create a second overlay by indexing two elements from our earlier ``overlay`` object and using ``*`` between them. We see that the first level is the ``group`` string (which defaults to the element class name) followed by the label, which wasn't set and is therefore mapped to a Roman numeral.", "start_char_idx": 2, "end_char_idx": 851, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f9673153-8629-40a7-b6e5-7b4741532922": {"__data__": {"id_": "f9673153-8629-40a7-b6e5-7b4741532922", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c76101c0-b876-449a-be5e-7cd9f00e80e7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3751f373ba2899c1c25ed8bcfb5d311dc37ec4db054ddef7d17bfe7667d0dbdc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0b969a3c-509b-4307-b7fe-4648820a3dfc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1687f52977e926b12136f1d069a5c50cf5746f1d36c5fe13f3264a548a91d036", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "16adcce3-4846-45d7-b91b-9d1d3af3de44", "node_type": "1", "metadata": {}, "hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "class_name": "RelatedNodeInfo"}}, "hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "text": "Using ``group`` and ``label`` with ``Overlay``\n\nNow let's return to the first simple overlay example, this time setting ``group`` and ``label`` as introduced in the Annotating Data guide:\n\n\n```python\nhigh_freq = hv.Curve((xs, [np.sin(2*x) for x in xs]), group='Sinusoid', label='High Frequency')\nlabelled = low_freq * high_freq * linpoints\nlabelled\n```\n\nOnce again, this example follows the corresponding ``Layout`` example, although this time we added a high-frequency curve to demonstrate how ``group`` and ``label`` are now used to generate the legend (as opposed to the title, as it was for ``Layout``).\n\nThe following example shows how ``group`` and ``label`` affect access:\n\n\n```python\nlabelled.Linear_Points.Demo * labelled.Sinusoid.High_Frequency * labelled.Sinusoid.Low_Frequency\n```\n\nThis new re-ordered ``Overlay`` switches the z-ordering as well as the legend color of the two sinusoidal curves. The colors and other plot options can be set for specific groups and labels as described in \nApplying Customizations.", "start_char_idx": 2, "end_char_idx": 1028, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "16adcce3-4846-45d7-b91b-9d1d3af3de44": {"__data__": {"id_": "16adcce3-4846-45d7-b91b-9d1d3af3de44", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9a703c34-2fba-409a-9ae7-0c5815de1961", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6baadc7aa629fa7fe477a62fcb34e37cfb624c9d9e3301251922e771c93663cf", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f9673153-8629-40a7-b6e5-7b4741532922", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "09e3f05fe1cd119c5669150a586b9dfde678a715f13cb509a0686f2e21387807", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "aa3c2af8-5e4e-44bf-9e5b-ac1168239fd9", "node_type": "1", "metadata": {}, "hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "class_name": "RelatedNodeInfo"}}, "hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "text": "Layouts of overlays\n\nOf course, layouts work with both elements and overlays:\n\n\n```python\noverlay + labelled + labelled.Sinusoid.Low_Frequency\n```", "start_char_idx": 2, "end_char_idx": 148, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "aa3c2af8-5e4e-44bf-9e5b-ac1168239fd9": {"__data__": {"id_": "aa3c2af8-5e4e-44bf-9e5b-ac1168239fd9", "embedding": null, "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "62dd6b8c-5140-410b-99ec-9d15fcbc2edb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0637255d49a59fec95c2a768dc12dff3b4b012118a2fed17f95bb366485ad705", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "16adcce3-4846-45d7-b91b-9d1d3af3de44", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ede37c804981bde8991e608f95406c06e1431a54b3a4ddcbd4ed8f1ce968185d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8bf70482-1930-4dd8-b650-41b748306d66", "node_type": "1", "metadata": {}, "hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "class_name": "RelatedNodeInfo"}}, "hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "text": "Tab completion\n\nBoth ``Layout`` and ``Overlay`` are designed to be easy to explore and inspect with tab completion. Try running:\n\n```python\noverlay.[tab]\n```\n\nor\n\n```python\nlayout.[tab]\n```\n\n\nIn a code cell and you should see the first levels of indexing (``Curve`` and ``Scatter``) conveniently listed at the top. If this is not the case, you may need to enable improved tab-completion as described in Configuring HoloViews.\n\nHaving seen how to compose viewable objects, the next section shows how to apply customizations.", "start_char_idx": 2, "end_char_idx": 525, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8bf70482-1930-4dd8-b650-41b748306d66": {"__data__": {"id_": "8bf70482-1930-4dd8-b650-41b748306d66", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a437b402-f243-4124-9fcd-530b50751fcc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "65b43d08d15b2f426179de7f1f26f1d93ef7422e27d27ad7484076295a3132b5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "aa3c2af8-5e4e-44bf-9e5b-ac1168239fd9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7318509e5850f8d8127e4afbf826fe5eef7304b0e51c3c12fe201cff9d4eeb4d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "74e8937f-322b-409d-8b07-c8ec78f6afa1", "node_type": "1", "metadata": {}, "hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "class_name": "RelatedNodeInfo"}}, "hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "text": "Applying Customizations\n\n\n```python\nimport pandas as pd\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension('bokeh', 'matplotlib')\n```\n\nAs introduced in the Customization section of the 'Getting Started' guide, HoloViews maintains a strict separation between your content (your data and declarations about your data) and its presentation (the details of how this data is represented visually). This separation is achieved by maintaining sets of keyword values (\"options\") that specify how elements are to appear, stored outside of the element itself. Option keywords can be specified for individual element instances, for all elements of a particular type, or for arbitrary user-defined sets of elements that you give a certain ``group`` and ``label`` (see Annotating Data).\n\nThe options system controls how individual plots appear, but other important settings are made more globally using the \"output\" system, which controls HoloViews plotting and rendering code (see the Plots and Renderers user guide). In this guide we will show how to customize the visual styling with the options and output systems, focusing on the mechanisms rather than the specific choices available (which are covered in other guides such as Style Mapping).", "start_char_idx": 2, "end_char_idx": 1267, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "74e8937f-322b-409d-8b07-c8ec78f6afa1": {"__data__": {"id_": "74e8937f-322b-409d-8b07-c8ec78f6afa1", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e3f136b6-1dc1-47ab-b113-f043df0d3824", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2664c36f1b0d0c321ff19f9475d1ee2009996b3b74eaab3190d6781411578d3e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8bf70482-1930-4dd8-b650-41b748306d66", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "34151b71840dc1e8ef99821bfdb0c2156c7e26ace08d9b9c1b45914f56792d09", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d9b02c50-f6c0-4527-beec-e1d66ccd8552", "node_type": "1", "metadata": {}, "hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "class_name": "RelatedNodeInfo"}}, "hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "text": "Core concepts\n\nThis section offers an overview of some core concepts for customizing visual representation, focusing on how HoloViews keeps content and presentation separate. To start, we will revisit the simple introductory example in the Customization getting-started guide (which might be helpful to review first).\n\n\n```python\nspike_train = pd.read_csv('../assets/spike_train.csv.gz')\ncurve = hv.Curve(spike_train, 'milliseconds', 'Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', [])\n```\n\nAnd now we display the ``curve`` and a ``spikes`` elements together in a layout as we did in the getting-started guide:\n\n\n```python\ncurve = hv.Curve( spike_train, 'milliseconds', 'Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', [])\nlayout = curve + spikes\n\nlayout.opts(\n opts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover']),\n opts.Spikes(height=150, width=900, yaxis=None, line_width=0.25, color='grey')).cols(1)\n```\n\nThis example illustrates a number of key concepts, as described below.", "start_char_idx": 2, "end_char_idx": 1047, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d9b02c50-f6c0-4527-beec-e1d66ccd8552": {"__data__": {"id_": "d9b02c50-f6c0-4527-beec-e1d66ccd8552", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8079e14f-c345-427e-acf6-eb64636f9815", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "700594fd97c4a009f2dee98b67b688f5a62843ffcf494c5e62906f10a5494d05", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "74e8937f-322b-409d-8b07-c8ec78f6afa1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d64f39152ab13280aa035a54eb8177ee03417b5359920bd9a7ce4911c01c993e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c2da3266-5c1b-42fd-8a52-457ec8a837b4", "node_type": "1", "metadata": {}, "hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "class_name": "RelatedNodeInfo"}}, "hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "text": "Content versus presentation\n\nIn the getting-started guide Introduction, we saw that we can print the string representation of HoloViews objects such as `layout`:\n\n\n```python\nprint(layout)\n```\n\nIn the Customization getting-started guide, the `.opts.info()` method was introduced that lets you see the options *associated* with (though not stored on) the objects:\n\n\n```python\nlayout.opts.info()\n```\n\nIf you inspect all the state of the `Layout`, `Curve`, or `Spikes` objects you will not find any of these keywords, because they are stored in an entirely separate data structure. HoloViews assigns a unique ID per HoloViews object that lets arbitrarily specific customization be associated with that object if needed, while also making it simple to define options that apply to entire classes of objects by type (or group and label if defined). The HoloViews element is thus *always* a thin wrapper around your data, without any visual styling information or plotting state, even though it *seems* like the object includes the styling information. This separation between content and presentation is by design, so that you can work with your data and with its presentation entirely independently.\n\nIf you wish to clear the options that have been associated with an object `obj`, you can call `obj.opts.clear()`.", "start_char_idx": 2, "end_char_idx": 1312, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c2da3266-5c1b-42fd-8a52-457ec8a837b4": {"__data__": {"id_": "c2da3266-5c1b-42fd-8a52-457ec8a837b4", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b8c66548-3a62-454a-acea-7d6c4917ab05", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7b62fad0e4589376f00c492742438dcc1bd9f1944b96d47f063ee96d7e2f6c71", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d9b02c50-f6c0-4527-beec-e1d66ccd8552", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9e2877abbd14e2d3116f2566ce13bdb1a3b60884d83030ac86bceca6fcf5891a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8025dec0-95fd-4190-9f30-c10efdc9d9ab", "node_type": "1", "metadata": {}, "hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "class_name": "RelatedNodeInfo"}}, "hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "text": "Option builders\n\nThe Customization getting-started guide also introduces the notion of *option builders*. One of the option builders in the visualization shown above is:\n\n\n```python\nopts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover'])\n```\n\nAn *option builder* takes a collection of keywords and returns an `Options` object that stores these keywords together. Why should you use option builders and how are they different from a vanilla dictionary?\n\n1. The option builder specifies which type of HoloViews object the options are for, which is important because each type accepts different options.\n2. Knowing the type, the options builder does *validation* against that type for the currently loaded plotting extensions. Try introducing a typo into one of the keywords above; you should get a helpful error message. Separately, try renaming `line_width` to `linewidth`, and you'll get a different message because the latter is a valid matplotlib keyword.\n3. The option builder allows *tab-completion* in the notebook. This is useful for discovering available keywords for that type of object, which helps prevent mistakes and makes it quicker to specify a set of keywords.\n\nIn the cell above, the specified options are applicable to `Curve` elements, and different validation and tab completion will be available for other types. \n\nThe returned `Options` object is different from a dictionary in the following ways:\n\n1. An optional *spec* is recorded, where this specification is normally just the element name. Above this is simply 'Curve'. Later, in section Using `group` and `label`, we will see how this can also specify the `group` and `label`.\n2. The keywords are alphanumerically sorted, making it easier to compare `Options` objects.", "start_char_idx": 2, "end_char_idx": 1784, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8025dec0-95fd-4190-9f30-c10efdc9d9ab": {"__data__": {"id_": "8025dec0-95fd-4190-9f30-c10efdc9d9ab", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9eec48a3-60d7-4a50-8c2f-8b13630b4719", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0f8717d9101a16193e689970fbdb1cb193bd0883c571ce0e93f8f3460286861f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c2da3266-5c1b-42fd-8a52-457ec8a837b4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ec9905d9849c176728ac7dcdd74409f3c76daf6b9692f40f880137ff6ff44e81", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f057ab81-123d-48b8-b7ca-62bd53dfe7dd", "node_type": "1", "metadata": {}, "hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "class_name": "RelatedNodeInfo"}}, "hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "text": "Inlining options\n\nWhen customizing a single element, the use of an option builder is not mandatory. If you have a small number of keywords that are common (e.g `color`, `cmap`, `title`, `width`, `height`) it can be clearer to inline them into the `.opts` method call if tab-completion and validation isn't required:\n\n\n```python\nnp.random.seed(42)\narray = np.random.random((10,10))\nim1 = hv.Image(array).opts(opts.Image(cmap='Reds')) # Using an option builder\nim2 = hv.Image(array).opts(cmap='Blues') # Without an option builder\nim1 + im2\n```\n\nYou cannot inline keywords for composite objects such as `Layout` or `Overlay` objects. For instance, the `layout` object is:\n\n\n```python\nprint(layout)\n```\n\nTo customize this layout, you need to use an option builder to associate your keywords with either the `Curve` or the `Spikes` object, or else you would have had to apply the options to the individual elements before you built the composite object. To illustrate setting by type, note that in the first example, both the `Curve` and the `Spikes` have different `height` values provided.\n\nYou can also target options by the `group` and `label` as described in section on using `group` and `label`.", "start_char_idx": 2, "end_char_idx": 1209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f057ab81-123d-48b8-b7ca-62bd53dfe7dd": {"__data__": {"id_": "f057ab81-123d-48b8-b7ca-62bd53dfe7dd", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "79d60502-3ff4-46a1-b0ae-5a5afab313a5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4672c73f6610cb3959cdd1853d212c27a3d5c27ab1fdc62a7d7d83c668eed82e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8025dec0-95fd-4190-9f30-c10efdc9d9ab", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3c68093771bc2d46a442929d28b3bd63079356b10f9bbbcdc2a54d5d5e8c177b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e9b5f9b6-2e57-4c74-b1ac-b8bdba8473f2", "node_type": "1", "metadata": {}, "hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "class_name": "RelatedNodeInfo"}}, "hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "text": "Session-specific options\n\nOne other common need is to set some options for a Python session, whether using Jupyter notebook or not. For this you can set the default options that will apply to all objects created subsequently:\n\n\n```python\nopts.defaults(\n opts.HeatMap(cmap='Summer', colorbar=True, toolbar='above'))\n```\n\nThe `opts.defaults` method has now set the style used for all `HeatMap` elements used in this session:\n\n\n```python\ndata = [(chr(65+i), chr(97+j), i*j) for i in range(5) for j in range(5) if i!=j]\nheatmap = hv.HeatMap(data).sort()\nheatmap\n```", "start_char_idx": 2, "end_char_idx": 567, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e9b5f9b6-2e57-4c74-b1ac-b8bdba8473f2": {"__data__": {"id_": "e9b5f9b6-2e57-4c74-b1ac-b8bdba8473f2", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "66a2ddc4-9769-47b4-bd0d-957df08f070f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "703f82d7a26002eb89f297dc5ad0401201ccce14892b4c0944a1fd74fc1841b1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f057ab81-123d-48b8-b7ca-62bd53dfe7dd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c093fc8c72b2d7b149c770416ef299fa5d2e4c24fd0ef8d8c6773d208eab4c39", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0b116a34-f8e7-41a4-9df6-969f12cb8101", "node_type": "1", "metadata": {}, "hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "class_name": "RelatedNodeInfo"}}, "hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "text": "Discovering options\n\nUsing tab completion in the option builders is one convenient and easy way of discovering the available options for an element. Another approach is to use `hv.help`.\n\nFor instance, if you run `hv.help(hv.Curve)` you will see a list of the 'style' and 'plot' options applicable to `Curve`. The distinction between these two types of options can often be ignored for most purposes, but the interested reader is encouraged to read more about them in more detail below.\n\nFor the purposes of discovering the available options, the keywords listed under the 'Style Options' section of the help output is worth noting. These keywords are specific to the active plotting extension and are part of the API for that plotting library. For instance, running `hv.help(hv.Curve)` in the cell below would give you the keywords in the Bokeh documentation that you can reference for customizing the appearance of `Curve` objects.", "start_char_idx": 2, "end_char_idx": 935, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0b116a34-f8e7-41a4-9df6-969f12cb8101": {"__data__": {"id_": "0b116a34-f8e7-41a4-9df6-969f12cb8101", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4f42bef6-99d6-4595-bb9f-3f59c797eeed", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "115a5c0c6bec0c484b9447b555ba0b3355d40acb4d1423e4afd9850865c1db8b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e9b5f9b6-2e57-4c74-b1ac-b8bdba8473f2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "673b39c8052c97ccb6c2afb6dde349b9260286422793b050dad70595360eebd2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4cbaf0d2-e3ad-4a5d-a006-ad7d5a208e25", "node_type": "1", "metadata": {}, "hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "class_name": "RelatedNodeInfo"}}, "hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "text": "Maximizing readability\n\nThere are many ways to specify options in your code using the above tools, but for creating readable, maintainable code, we recommend making the separation of content and presentation explicit. Someone reading your code can then understand your visualizations in two steps 1) what your data *is* in terms of the applicable elements and containers 2) how this data is to be presented visually.\n\nThe following guide details the approach we have used through out the examples and guides on holoviews.org. We have found that following these rules makes code involving holoviews easier to read and more consistent.\n\nThe core principle is as follows: ***avoid mixing declarations of data, elements and containers with details of their visual appearance***.", "start_char_idx": 2, "end_char_idx": 776, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4cbaf0d2-e3ad-4a5d-a006-ad7d5a208e25": {"__data__": {"id_": "4cbaf0d2-e3ad-4a5d-a006-ad7d5a208e25", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a6b1a559-6520-45e1-a06c-4b37fe41b69e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "53a283a910dec9e6fb83bb5edd7e0d6e95b42ef130dce00bd57a3dfc0fd7b4f7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0b116a34-f8e7-41a4-9df6-969f12cb8101", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "79f40dab176ea21c8a915a421d65c816ba1be420058b1b7e3ea06969d8427d2c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5252e464-9219-46a2-a24d-69a7c319d3ec", "node_type": "1", "metadata": {}, "hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "class_name": "RelatedNodeInfo"}}, "hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "text": "Two contrasting examples\n\nOne of the best ways to do this is to declare all your elements, compose them and then apply all the necessary styling with the `.opts` method before the visualization is rendered to disk or to the screen. For instance, the example from the getting-started guide could have been written sub-optimally as follows:\n\n***Sub-optimal***\n```python\ncurve = hv.Curve( spike_train, 'milliseconds', 'Hertz').opts(\n height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover'])\nspikes = hv.Spikes(spike_train, 'milliseconds', vdims=[]).opts(\nheight=150, width=900, yaxis=None, line_width=0.25, color='grey')\n(curve + spikes).cols(1)\n```\n\nCode like that is very difficult to read because it mixes declarations of the data and its dimensions with details about how to present it. The recommended version declares the `Layout`, then separately applies all the options together where it's clear that they are just hints for the visualization:\n\n***Recommended***\n```python\ncurve = hv.Curve( spike_train, 'milliseconds', 'Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', [])\nlayout = curve + spikes\n\nlayout.opts(\n opts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='red', tools=['hover']),\n opts.Spikes(height=150, width=900, yaxis=None, line_width=0.25, color='grey')).cols(1)\n```\n\n\nBy grouping the options in this way and applying them at the end, you can see the definition of `layout` without being distracted by visual concerns declared later. Conversely, you can modify the visual appearance of `layout` easily without needing to know exactly how it was defined. The coding style guide section below offers additional advice for keeping things readable and consistent.", "start_char_idx": 2, "end_char_idx": 1742, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5252e464-9219-46a2-a24d-69a7c319d3ec": {"__data__": {"id_": "5252e464-9219-46a2-a24d-69a7c319d3ec", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "60d7ca39-eb78-49a5-a2f8-69097af5681a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "20f9c86ceb17da1fd63cd8d435fdf915683597a607fd3cde67ee5a60e87e7276", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4cbaf0d2-e3ad-4a5d-a006-ad7d5a208e25", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5e6ac397e4abfd9765f21c5be8bd30f43c3ccd9152a33df1c2bcc181c1715888", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "729a1f7e-103d-4470-9421-6d7ac320bb8e", "node_type": "1", "metadata": {}, "hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "class_name": "RelatedNodeInfo"}}, "hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "text": "When to use multiple`.opts` calls\n\nThe above coding style applies in many case, but sometimes you have multiple elements of the same type that you need to distinguish visually. For instance, you may have a set of curves where using the `dim` or `Cycle` objects (described in the Style Mapping user guide) is not appropriate and you want to customize the appearance of each curve individually. Alternatively, you may be generating elements in a list comprehension for use in `NdOverlay` and have a specific style to apply to each one.\n\nIn these situations, it is often appropriate to use the inline style of `.opts` locally. In these instances, it is often best to give the individually styled objects a suitable named handle as illustrated by the legend example of the gallery.", "start_char_idx": 2, "end_char_idx": 780, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "729a1f7e-103d-4470-9421-6d7ac320bb8e": {"__data__": {"id_": "729a1f7e-103d-4470-9421-6d7ac320bb8e", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4d0f7d40-d879-4298-972c-7744cd33bc9e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "506e9fd40f9cae59fd2426a0d0ed1397f0fb04588a99cf74af44954a8986aa4b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5252e464-9219-46a2-a24d-69a7c319d3ec", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8c37452026155144a78123a3b6c19956e71c7d01cc0268688bdbb6cac55675ad", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9c30a655-197a-4687-9381-75408bdbb341", "node_type": "1", "metadata": {}, "hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "class_name": "RelatedNodeInfo"}}, "hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "text": "General advice\n\nAs HoloViews is highly compositional by design, you can always build long expressions mixing the data and element declarations, the composition of these elements, and their customization. Even though such expressions can be terse they can also be difficult to read.\n\nThe simplest way to avoid long expressions is to keep some level of separation between these stages:\n\n1. declaration of the data\n2. declaration of the elements, including `.opts` to distinguish between elements of the same type if necessary \n3. composition with `+` and `*` into layouts and overlays, and \n4. customization of the composite object, either with a final call to the `.opts` method, or by declaring such settings as the default for your entire session as described above.\n\nWhen stages are simple enough, it can be appropriate to combine them. For instance, if the declaration of the data is simple enough, you can fold in the declaration of the element. In general, any expression involving three or more of these stages will benefit from being broken up into several steps.\n\nThese general principles will help you write more readable code. Maximizing readability will always require some level of judgement, but you can maximize consistency by consulting the coding style guide section for more tips.", "start_char_idx": 2, "end_char_idx": 1299, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9c30a655-197a-4687-9381-75408bdbb341": {"__data__": {"id_": "9c30a655-197a-4687-9381-75408bdbb341", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ea6f5752-1f4a-418d-b87e-94bfdcab903b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ffc0d9a4a56d9e175093b0adc59505c118bb5345446ef8ca34012288df3ef0bb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "729a1f7e-103d-4470-9421-6d7ac320bb8e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "896166ea4b06a85c910e9cee73d636b747f41425b9844e914d3a909a63c88ea0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e4542bbc-a975-4a79-8766-7b1e928541de", "node_type": "1", "metadata": {}, "hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "class_name": "RelatedNodeInfo"}}, "hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "text": "Customizing display output\n\n\nThe options system controls most of the customizations you might want to do, but there are a few settings that are controlled at a more general level that cuts across all HoloViews object types: the active plotting extension (e.g. Bokeh or Matplotlib), the output display format (PNG, SVG, etc.), the output figure size, and other similar options. The `hv.output` utility allows you to modify these more global settings, either for all subsequent objects or for one particular object:\n\n* `hv.output(**kwargs)`: Customize how the output appears for the rest of the notebook session.\n* `hv.output(obj, **kwargs)`: Temporarily affect the display of an object `obj` using the keyword `**kwargs`.\n\nThe `hv.output` utility only has an effect in contexts where HoloViews objects can be automatically displayed, which currently is limited to the Jupyter Notebook (in either its classic or JupyterLab variants). In any other Python context, using `hv.output` has no effect, as there is no automatically displayed output; see the hv.save() and hv.render() utilities for explicitly creating output in those other contexts.\n\nTo start with `hv.output`, let us define a `Path` object:\n\n\n```python\nlin = np.linspace(0, np.pi*2, 200)\n\ndef lissajous(t, a, b, delta):\n return (np.sin(a * t + delta), np.sin(b * t), t)\n\npath = hv.Path([lissajous(lin, 3, 5, np.pi/2)])\npath.opts(opts.Path(color='purple', line_width=3, line_dash='dotted'))\n```\n\nNow, to illustrate, let's use `hv.output` to switch our plotting extension to matplotlib:\n\n\n```python\nhv.output(backend='matplotlib', fig='svg')\n```\n\nWe can now display our `path` object with some option customization:\n\n\n```python\npath.opts(opts.Path(linewidth=2, color='red', linestyle='dotted'))\n```\n\nOur plot is now rendered with Matplotlib, in SVG format (try right-clicking the image in the web browser and saving it to disk to confirm). Note that the `opts.Path` option builder now tab completes *Matplotlib* keywords because we activated the Matplotlib plotting extension beforehand. Specifically, `linewidth` and `linestyle` don't exist in Bokeh, where the corresponding options are called `line_width` and `line_dash` instead.\n\nYou can see the custom output options that are currently active using `hv.output.info()`:\n\n\n```python\nhv.output.info()\n```\n\nThe info method will always show which backend is active as well as any other custom settings you have specified. These settings apply to the subsequent display of all objects unless you customize the output display settings for a single object.\n\n\nTo illustrate how settings are kept separate, let us switch back to Bokeh in this notebook session:\n\n\n```python\nhv.output(backend='bokeh')\nhv.output.info()\n```\n\nWith Bokeh active, we can now declare options on `path` that we want to apply only to matplotlib:\n\n\n```python\npath = path.opts(\n opts.Path(linewidth=3, color='blue', backend='matplotlib'))\npath\n```\n\nNow we can supply `path` to `hv.output` to customize how it is displayed, while activating matplotlib to generate that display. In the next cell, we render our path at 50% size as an SVG using matplotlib.\n\n\n```python\nhv.output(path, backend='matplotlib', fig='svg', size=50)\n```\n\nPassing `hv.output` an object will apply the specified settings only for the subsequent display. If you were to view `path` now in the usual way, you would see that it is still being displayed with Bokeh with purple dotted lines.\n\nOne thing to note is that when we set the options with `backend='matplotlib'`, the active plotting extension was Bokeh. This means that `opts.Path` will tab complete *bokeh* keywords, and not the matplotlib ones that were specified. In practice you will want to set the backend appropriately before building your options settings, to ensure that you get the most appropriate tab completion.", "start_char_idx": 2, "end_char_idx": 3832, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e4542bbc-a975-4a79-8766-7b1e928541de": {"__data__": {"id_": "e4542bbc-a975-4a79-8766-7b1e928541de", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d96a246a-69bb-45ed-bf1a-fb7817cb55cf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "00bde40d8f09551d7ab9088bf8779af91f7571f4847c9a25f25a725bf2402f7b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9c30a655-197a-4687-9381-75408bdbb341", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b2e52a0c12ba27f7fc4e1ff26e2c9481f973c4901235b0d770e84471ebf4907d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b37be0aa-3ddf-4bd1-9623-800f82da6cf6", "node_type": "1", "metadata": {}, "hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "class_name": "RelatedNodeInfo"}}, "hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "text": "Available `hv.output` settings\n\nYou can see the available settings using `help(hv.output)`. For reference, here are the most commonly used ones:\n\n* **backend**: *The backend used by HoloViews*. If the necessary libraries are installed this can be `'bokeh'`, `'matplotlib'` or `'plotly'`.\n* **fig** : *The static figure format*. The most common options are `'svg'` and `'png'`.\n* **holomap**: *The display type for holomaps*. With matplotlib and the necessary support libraries, this may be `'gif'` or `'mp4'`. The JavaScript `'scrubber'` widgets as well as the regular `'widgets'` are always supported.\n* **fps**: *The frames per second used for animations*. This setting is used for GIF output and by the scrubber widget.\n* **size**: *The percentage size of displayed output*. Useful for making all display larger or smaller.\n* **dpi**: *The rendered dpi of the figure*. This setting affects raster output such as PNG images.\n\nIn `help(hv.output)` you will see a few other, less common settings. The `filename` setting particular is not recommended and will be deprecated in favor of `hv.save` in future.", "start_char_idx": 2, "end_char_idx": 1107, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b37be0aa-3ddf-4bd1-9623-800f82da6cf6": {"__data__": {"id_": "b37be0aa-3ddf-4bd1-9623-800f82da6cf6", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0db8be65-42a7-42bd-9267-2b36cab4b735", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "228ce96dfa538a48e691408dadfeccf07c85246771fd4c4ea6f4b1490f15af55", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e4542bbc-a975-4a79-8766-7b1e928541de", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "10a8806b01ca79a287a6ac0bb151f8e3974f59b4778a6c8711101542551a7fca", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b1028ab9-411a-4c80-9410-056ad2a89253", "node_type": "1", "metadata": {}, "hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "class_name": "RelatedNodeInfo"}}, "hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "text": "Coding style guide\n\nUsing `hv.output` plus option builders with the `.opts` method and `opts.default` covers the functionality required for most HoloViews code written by users. In addition to these recommended tools, HoloViews supports Notebook Magics (not recommended because they are Jupyter-specific) and literal (nested dictionary) formats useful for developers, as detailed in the Extending HoloViews section. \n\nThis section offers further recommendations for how users can structure their code. These are generally tips based on the important principles described in the maximizing readability section that are often helpful but optional.\n\n* Use as few `.opts` calls as necessary to style the object the way you want.\n* You can inline keywords without an option builder if you only have a few common keywords. For instance, `hv.Image(...).opts(cmap='Reds')` is clearer to read than `hv.Image(...).opts(opts.Image(cmap='Reds'))`.\n* Conversely, you *should* use an option builder if you have more than four keywords.\n* When you have multiple option builders, it is often clearest to list them on separate lines with a single indentation in both `.opts` and `opts.defaults`:\n \n**Not recommended**\n\n```\nlayout.opts(opts.VLine(color='white'), opts.Image(cmap='Reds'), opts.Layout(width=500), opts.Curve(color='blue'))\n```\n\n**Recommended**\n\n```\nlayout.opts(\n opts.Curve(color='blue'),\n opts.Image(cmap='Reds'),\n opts.Layout(width=500),\n opts.VLine(color='white'))\n``` \n \n* The latter is recommended for another reason: if possible, list your element option builders in alphabetical order, before your container option builders in alphabetical order.\n\n* Keep the expression before the `.opts` method simple so that the overall expression is readable.\n* Don't mix `hv.output` and use of the `.opts` method in the same expression.", "start_char_idx": 2, "end_char_idx": 1849, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b1028ab9-411a-4c80-9410-056ad2a89253": {"__data__": {"id_": "b1028ab9-411a-4c80-9410-056ad2a89253", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5e43b865-f498-4d60-b103-c88caed0c66e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b6d1d6617e33b5e7d778c087fea5a86c2a63897906f68164ed66a86c862a3629", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b37be0aa-3ddf-4bd1-9623-800f82da6cf6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b093537bc8b0771946568f0b1bc48570eccce1558bbcbed60ebb497a441bf95d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "65b60eb6-7f01-48c2-baf3-04777d9b92ba", "node_type": "1", "metadata": {}, "hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "class_name": "RelatedNodeInfo"}}, "hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "text": "What is `.options`?\n\n\nIf you tab complete a HoloViews object, you'll notice there is an `.options` method as well as a `.opts` method. So what is the difference?\n\nThe `.options` method was introduced in HoloViews 1.10 and was the first time HoloViews allowed users to ignore the distinction between 'style', 'plot' and 'norm' options described in the next section. It is largely equivalent to the `.opts` method except that it applies the options on a returned clone of the object.\n\nIn other words, you have `clone = obj.options(**kwargs)` where `obj` is unaffected by the keywords supplied while `clone` will be customized. Both `.opts` and `.options` support an explicit `clone` keyword, so:\n\n* `obj.opts(**kwargs, clone=True)` is equivalent to `obj.options(**kwargs)`, and conversely\n* `obj.options(**kwargs, clone=False)` is equivalent to `obj.opts(**kwargs)`\n\nFor this reason, users only ever need to use `.opts` and occasionally supply `clone=True` if required. The only other difference between these methods is that `.opts` supports the full literal specification that allows splitting into style, plot and norm options (for developers) whereas `.options` does not.", "start_char_idx": 2, "end_char_idx": 1176, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "65b60eb6-7f01-48c2-baf3-04777d9b92ba": {"__data__": {"id_": "65b60eb6-7f01-48c2-baf3-04777d9b92ba", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8a9ca8fc-48da-4eaf-bf0a-f70ec9b8d176", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8dbc5bcb2ebfbe84b1a671a81566d39a05f503acc378b1cec613bde86409763f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b1028ab9-411a-4c80-9410-056ad2a89253", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5d7f6c65b7abf6131b555dd3027642fba739a40ff5c22a7d6e44ca8ccbbd4451", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fd6adeee-e4df-4a45-bbef-15a1ad7488e8", "node_type": "1", "metadata": {}, "hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "class_name": "RelatedNodeInfo"}}, "hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "text": "When should I use `clone=True`?\n\nThe 'Persistent styles' section of the customization user guide shows how HoloViews remembers options set for an object (per plotting extension). For instance, we never customized the `spikes` object defined at the start of the notebook but we did customize it when it was part of a `Layout` called `layout`. Examining this `spikes` object, we see the options were applied to the underlying object, not just a copy of it in the layout:\n\n\n\n```python\nspikes\n```\n\nThis is because `clone=False` by default in the `.opts` method. To illustrate `clone=True`, let's view some purple spikes *without* affecting the original `spikes` object:\n\n\n```python\npurple_spikes = spikes.opts(color='purple', clone=True)\npurple_spikes\n```\n\nNow if you were to look at `spikes` again, you would see it is still looks like the grey version above and only `purple_spikes` is purple. This means that `clone=True` is useful when you want to keep different styles for some HoloViews object (by making styled clones of it) instead of overwriting the options each time you call `.opts`.", "start_char_idx": 2, "end_char_idx": 1092, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fd6adeee-e4df-4a45-bbef-15a1ad7488e8": {"__data__": {"id_": "fd6adeee-e4df-4a45-bbef-15a1ad7488e8", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1337696a-6c5b-44d3-80c4-90c9bb4cfdc9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "912fd4f9df9f21fbe9e98c24c35ddc4b3d7898287f3ec0970eddb17163040cbb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "65b60eb6-7f01-48c2-baf3-04777d9b92ba", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "aae7726d33d11ba2f278e02fdef01fe5a1accb8af14c5882a078e0ba10cf62c3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "390e51ad-8c80-4321-a564-28b0873250fa", "node_type": "1", "metadata": {}, "hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "class_name": "RelatedNodeInfo"}}, "hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "text": "Extending HoloViews\n\nIn addition to the formats described above for use by users, additional option formats are supported that are less user friendly for data exploration but may be more convenient for library authors building on HoloViews.\n\nThe first of these is the *`Option` list syntax* which is typically most useful outside of notebooks, a *literal syntax* that avoids the need to import `opts`, and then finally a literal syntax that keeps *style* and *plot* options separate.", "start_char_idx": 2, "end_char_idx": 485, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "390e51ad-8c80-4321-a564-28b0873250fa": {"__data__": {"id_": "390e51ad-8c80-4321-a564-28b0873250fa", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4f13e2c4-7e36-46bb-a420-d500d9328996", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "221d7e26e19ffebb4201afd9346c472d59855ef0a81b720c6fe59692722c609c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fd6adeee-e4df-4a45-bbef-15a1ad7488e8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "49d457fe902f36025f5600cab607655a56494b4c213029a23a5a1eaff68c0147", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b6dbdac6-f645-48ea-ae40-dde01ed5eb71", "node_type": "1", "metadata": {}, "hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "class_name": "RelatedNodeInfo"}}, "hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "text": "`Option` list syntax\n\nIf you find yourself using `obj.opts(*options)` where `options` is a list of `Option` objects, use `obj.opts(options)` instead as list input is also supported:\n\n\n```python\noptions = [\n opts.Curve( height=200, width=900, xaxis=None, line_width=1.50, color='grey', tools=['hover']),\n opts.Spikes(height=150, width=900, yaxis=None, line_width=0.25, color='orange')]\n \nlayout.opts(options).cols(1)\n```\n\nThis approach is often best in regular Python code where you are dynamically building up a list of options to apply. Using the option builders early also allows for early validation before use in the `.opts` method.", "start_char_idx": 2, "end_char_idx": 647, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b6dbdac6-f645-48ea-ae40-dde01ed5eb71": {"__data__": {"id_": "b6dbdac6-f645-48ea-ae40-dde01ed5eb71", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "95078f9a-9ca7-424e-b462-1a2d831a0edb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7c07131e90d6a95ff19b0160eb5a61a67714a9a91a0454f28a5834939a22b68c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "390e51ad-8c80-4321-a564-28b0873250fa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "453dce154b29840a9dd0e72a53f728dfdae287554927bd5a3ed3644476c8f063", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fcc1ec03-0215-464e-8f07-d015c6be9c28", "node_type": "1", "metadata": {}, "hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "class_name": "RelatedNodeInfo"}}, "hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "text": "Literal syntax\n\nThis syntax has the advantage of being a pure Python literal but it is harder to work with directly (due to nested dictionaries), is less readable, lacks tab completion support and lacks validation at the point where the keywords are defined:\n\n\n\n```python\nlayout.opts(\n {'Curve': dict(height=200, width=900, xaxis=None, line_width=2, color='blue', tools=['hover']),\n 'Spikes': dict(height=150, width=900, yaxis=None, line_width=0.25, color='green')}).cols(1)\n```\n\nThe utility of this format is you don't need to import `opts` and it is easier to dynamically add or remove keywords using Python or if you are storing options in a text file like YAML or JSON and only later applying them in Python code. This format should be avoided when trying to maximize readability or make the available keyword options easy to explore.", "start_char_idx": 2, "end_char_idx": 848, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fcc1ec03-0215-464e-8f07-d015c6be9c28": {"__data__": {"id_": "fcc1ec03-0215-464e-8f07-d015c6be9c28", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1369b4d2-63bf-4a29-ba32-8bad2d08ef21", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "63c162c98d7b03b27bbdacfe07d354d7231a265e30b21073c023c039b1ca7385", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b6dbdac6-f645-48ea-ae40-dde01ed5eb71", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5ae55e5b5a4139a64671b8bbaf6c11c75cc9490698cdc82c0cc52cbb6528d391", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "91162427-49f8-4a22-a05e-507566eb829a", "node_type": "1", "metadata": {}, "hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "class_name": "RelatedNodeInfo"}}, "hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "text": "Using `group` and `label`\n\nThe notion of an element `group` and `label` was introduced in Annotating Data. This type of metadata is helpful for organizing large collections of elements with shared styling, such as automatically generated objects from some external software (e.g. a simulator). If you have a large set of elements with semantically meaningful `group` and `label` parameters set, you can use this information to appropriately customize large numbers of visualizations at once.\n\nTo illustrate, here are four overlaid curves where three have the `group` of 'Sinusoid' and one of these also has the label 'Squared':\n\n\n```python\nxs = np.linspace(-np.pi,np.pi,100)\ncurve = hv.Curve((xs, xs/3))\ngroup_curve1 = hv.Curve((xs, np.sin(xs)), group='Sinusoid')\ngroup_curve2 = hv.Curve((xs, np.sin(xs+np.pi/4)), group='Sinusoid')\nlabel_curve = hv.Curve((xs, np.sin(xs)**2), group='Sinusoid', label='Squared')\ncurves = curve * group_curve1 * group_curve2 * label_curve\ncurves\n```\n\nWe can now use the `.opts` method to make all curves blue unless they are in the 'Sinusoid' group in which case they are red. Additionally, if a curve in the 'Sinusoid' group also has the label 'Squared', we can make sure that curve is green with a custom interpolation option:\n\n\n```python\ncurves.opts(\n opts.Curve(color='blue'),\n opts.Curve('Sinusoid', color='red'),\n opts.Curve('Sinusoid.Squared', interpolation='steps-mid', color='green'))\n```\n\nBy using `opts.defaults` instead of the `.opts` method, we can use this type of customization to apply options to many elements, including elements that haven't even been created yet. For instance, if we run:\n\n\n```python\nopts.defaults(opts.Area('Error', alpha=0.5, color='grey'))\n```\n\nThen any `Area` element with a `group` of 'Error' will then be displayed as a semi-transparent grey:\n\n\n```python\nX = np.linspace(0,2,10)\nhv.Area((X, np.random.rand(10), -np.random.rand(10)), vdims=['y', 'y2'], group='Error')\n```", "start_char_idx": 2, "end_char_idx": 1955, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "91162427-49f8-4a22-a05e-507566eb829a": {"__data__": {"id_": "91162427-49f8-4a22-a05e-507566eb829a", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2b194c57-db06-4ce2-86ca-31f52d494b63", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "619d6c8f95f29d9d4d9796320925640ce2cb3b405123f29f78129ca26cb34cf2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fcc1ec03-0215-464e-8f07-d015c6be9c28", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ce2f4aa350c5cccf3fc53ccb06dfe2e7e6a390e4c2a882cb8916c4fa4ce1a312", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "49186d12-b3f2-44a9-b22f-344cd07a1f2e", "node_type": "1", "metadata": {}, "hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "class_name": "RelatedNodeInfo"}}, "hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "text": "Split into `style`, `plot` and `norm` options\n\nIn `HoloViews`, an element such as `Curve` actually has three semantic distinct categories of options: `style`, `plot`, and `norm` options. Normally, a user doesn't need to worry about the distinction if they spend most of their time working with a single plotting extension.\n\nWhen trying to build a system that consistently needs to generate visualizations across different plotting libraries, it can be useful to make this distinction explicit:", "start_char_idx": 2, "end_char_idx": 495, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "49186d12-b3f2-44a9-b22f-344cd07a1f2e": {"__data__": {"id_": "49186d12-b3f2-44a9-b22f-344cd07a1f2e", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "28c147a8-5b06-443d-8194-8bdc7d760fc4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "29a9fc034b6104459e69f60df36abb7577d486afd161fdc5e15d84a7d759fe3a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "91162427-49f8-4a22-a05e-507566eb829a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b29bc1fee586cfbbf6182508f6380c835484d611a974d48004943cce04b7a502", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cbfc5c75-b78b-4f6a-9bab-55d522146ab5", "node_type": "1", "metadata": {}, "hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "class_name": "RelatedNodeInfo"}}, "hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "text": "``style`` options:\n\n``style`` options are passed directly to the underlying rendering backend that actually draws the plots, allowing you to control the details of how it behaves. Each backend has its own options (e.g. the ``bokeh`` or plotly backends).\n\nFor whichever backend has been selected, HoloViews can tell you which options are supported, but you will need to read the corresponding documentation (e.g. matplotlib, bokeh) for the details of their use. For listing available options, see the ``hv.help`` as described in the Discovering options section.\n\nHoloViews has been designed to be easily extensible to additional backends in the future and each backend would have its own set of style options.", "start_char_idx": 2, "end_char_idx": 711, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cbfc5c75-b78b-4f6a-9bab-55d522146ab5": {"__data__": {"id_": "cbfc5c75-b78b-4f6a-9bab-55d522146ab5", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ee95fde1-095d-4a90-97f9-a3b9c11e8963", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5d0eea6998a317a87c68faec180f312532347fab68723a23b2f8090675b1e99d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "49186d12-b3f2-44a9-b22f-344cd07a1f2e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f8056e832501f18cbfcdc166ca3add00db216072be35824c12cf159e353f3606", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "da3b1a49-1e1c-421a-9e8d-3ac6fc139918", "node_type": "1", "metadata": {}, "hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "class_name": "RelatedNodeInfo"}}, "hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "text": "``plot`` options:\n\nEach of the various HoloViews plotting classes declares various Parameters that control how HoloViews builds the visualization for that type of object, such as plot sizes and labels. HoloViews uses these options internally; they are not simply passed to the underlying backend. HoloViews documents these options fully in its online help and in the Reference Manual. These options may vary for different backends in some cases, depending on the support available both in that library and in the HoloViews interface to it, but we try to keep any options that are meaningful for a variety of backends the same for all of them. For listing available options, see the output of ``hv.help``.", "start_char_idx": 2, "end_char_idx": 709, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "da3b1a49-1e1c-421a-9e8d-3ac6fc139918": {"__data__": {"id_": "da3b1a49-1e1c-421a-9e8d-3ac6fc139918", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1d5c8c49-ba2b-4d34-ade0-d7bd8da383d8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7793e66a5bb67a29e539051e73cd06fadba59bdc7aeede34ff9d792a076a95d3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cbfc5c75-b78b-4f6a-9bab-55d522146ab5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e8e1095ebdfb81b1e3759b5c167acf10a22fa906603a6baa7c37a84a28a86690", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0732b606-9c43-4d56-9d7e-8124d8127905", "node_type": "1", "metadata": {}, "hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "class_name": "RelatedNodeInfo"}}, "hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "text": "``norm`` options:\n\n``norm`` options are a special type of plot option that are applied orthogonally to the above two types, to control normalization. Normalization refers to adjusting the properties of one plot relative to those of another. For instance, two images normalized together would appear with relative brightness levels, with the brightest image using the full range black to white, while the other image is scaled proportionally. Two images normalized independently would both cover the full range from black to white. Similarly, two axis ranges normalized together are effectively linked and will expand to fit the largest range of either axis, while those normalized separately would cover different ranges. For listing available options, see the output of ``hv.help``.\n\nYou can preserve the semantic distinction between these types of option in an augmented form of the Literal syntax as follows:\n\n\n```python\nfull_literal_spec = {\n 'Curve': {'style':dict(color='orange')}, \n 'Curve.Sinusoid': {'style':dict(color='grey')}, \n 'Curve.Sinusoid.Squared': {'style':dict(color='black'),\n 'plot':dict(interpolation='steps-mid')}}\nhv.opts.apply_groups(curves, full_literal_spec)\n```\n\nThis specification is what HoloViews uses internally, but it is awkward for people to use and is not ever recommended for normal users. That said, it does offer the maximal amount of flexibility and power for integration with other software.\n\nFor instance, a simulator that can output visualization using either Bokeh or Matplotlib via HoloViews could use this format. By keeping the 'plot' and 'style' options separate, the 'plot' options could be set regardless of the plotting library while the 'style' options would be conditional on the backend.", "start_char_idx": 2, "end_char_idx": 1787, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0732b606-9c43-4d56-9d7e-8124d8127905": {"__data__": {"id_": "0732b606-9c43-4d56-9d7e-8124d8127905", "embedding": null, "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "38355a40-a391-43c7-8f26-8bbdeca2ef38", "node_type": "4", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "67421f59cdee438fe0cbd3acad0c9f06de923a71ff086d34946d4cab2ef18a5f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "da3b1a49-1e1c-421a-9e8d-3ac6fc139918", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2cbc40ce811c310316fbeb0181048df46dd02549823d9811bc4b64b68b9e1bf3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "53f22986-de77-4b71-b993-385b7f27445e", "node_type": "1", "metadata": {}, "hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "class_name": "RelatedNodeInfo"}}, "hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "text": "Onwards\n\nThis section of the user guide has described how you can discover and set customization options in HoloViews. Using `hv.help` and the option builders, you should be able to find the options available for any given object you want to display.\n\nWhat *hasn't* been explored are some of the facilities HoloViews offers to map the dimensions of your data to style options. This important topic is explored in the next user guide Style Mapping, where you will learn of the `dim` object as well as about the `Cycle` and `Palette` objects.", "start_char_idx": 2, "end_char_idx": 542, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "53f22986-de77-4b71-b993-385b7f27445e": {"__data__": {"id_": "53f22986-de77-4b71-b993-385b7f27445e", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c9500f3e-8cdd-4970-968d-1dc4fd1a7e36", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "63690d197d9c1f639165a5a31445f50fb665ea8d3013384396e7b84e1113b768", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0732b606-9c43-4d56-9d7e-8124d8127905", "node_type": "1", "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d76448ca5f19e867662fd42fad7457d7b0acfc64b17f16a574729cdbcb2f4d99", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "426cb3b2-542f-48c6-89c1-8cab6e11be67", "node_type": "1", "metadata": {}, "hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "class_name": "RelatedNodeInfo"}}, "hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "text": "Style Mapping\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import dim, opts\n\nhv.extension('bokeh')\n```\n\nOne of the major benefits of HoloViews is the fact that Elements are simple, declarative wrappers around your data, with clearly defined semantics describing how the dimensions of the data map to the screen. Usually the key dimensions (kdims) and value dimensions map to coordinates of the plot axes and/or the colormapped intensity. However there are a huge number of ways to augment the visual representation of an element by mapping dimensions to visual attributes. In this section we will explore how we can declare such mappings including complex transforms specified by so called ``dim`` objects.\n\nTo illustrate this point let us create a set of three points with x/y-coordinates and alpha, color, marker and size values and then map each of those value dimensions to a visual attribute by name. Note that by default kdims is x,y. However, in this example we also show that the names of the dimensions can be changed and we use 'x values' and 'y values' to represent the data series names.\n\n\n```python\ndata = {\n 'x values': [0, 1, 0.5],\n 'y values': [1, 0, 0.5],\n 'alpha': [0.5, 1, 0.3],\n 'color': ['red', 'blue', 'green'],\n 'marker': ['circle', 'triangle', 'diamond'],\n 'size': [15, 25, 40]\n}\n\nopts.defaults(opts.Points(size=8, line_color='black'))\n\nhv.Points(data, kdims=['x values','y values'] , vdims=['alpha', 'color', 'marker', 'size']).opts(\n alpha='alpha', color='color', marker='marker', size='size')\n```\n\nThis is the simplest approach to style mapping, dimensions can be mapped to visual attributes directly by name. However often columns in the data will not directly map to a visual property, e.g. we might want to normalize values before mapping them to the alpha, or apply a scaling factor to some values before mapping them to the point size; this is where ``dim`` transforms come in. Below are a few examples of using ``dim`` transforms to map a dimension in the data to the visual style in the plot:\n\n\n```python\npoints = hv.Points(np.random.rand(400, 4))\n\nbins = [0, .25, 0.5, .75, 1]\nlabels = ['circle', 'triangle', 'diamond', 'square']\n\nlayout = hv.Layout([\n points.relabel('Alpha' ).opts(alpha =dim('x').norm()),\n points.relabel('Angle' ).opts(angle =dim('x').norm()*360, marker='dash'),\n points.relabel('Color' ).opts(color =dim('x')),\n points.relabel('Marker').opts(marker=dim('x').bin(bins, labels)),\n points.relabel('Size' ).opts(size =dim('x')*10)\n])\n\nlayout.opts(opts.Points(width=250, height=250, xaxis=None, yaxis=None)).cols(5)\n```", "start_char_idx": 2, "end_char_idx": 2636, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "426cb3b2-542f-48c6-89c1-8cab6e11be67": {"__data__": {"id_": "426cb3b2-542f-48c6-89c1-8cab6e11be67", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a4e16272-a9b5-41e3-ba7c-0dee4f8873e9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e0af728c5366efdc4518723c17e8efc6e5609608b14294a9d68716f7c3076c9f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "53f22986-de77-4b71-b993-385b7f27445e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f7bc7baedace18ac761e6fe3c5b64d7a64c070d1ec5d1e59ae7744f9205cdc0d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b51de4d6-88ef-4e41-b235-d7ee62c10ecb", "node_type": "1", "metadata": {}, "hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "class_name": "RelatedNodeInfo"}}, "hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "text": "What are dim transforms?\n\nIn the above example we saw how to use an ``dim`` to define a transform from a dimension in your data to the visual property on screen. A ``dim`` therefore is a simple way to declare a deferred transform of your data. In the simplest case an ``dim`` simply returns the data for a dimension without transforming it, e.g. to look up the ``'alpha'`` dimension on the points object we can create an ``dim`` and use the ``apply`` method to evaluate the expression:\n\n\n```python\nfrom holoviews import dim\n\nds = hv.Dataset(np.random.rand(10, 4)*10, ['x', 'y'], ['alpha', 'size'])\n\ndim('alpha').apply(ds)\n```", "start_char_idx": 2, "end_char_idx": 627, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b51de4d6-88ef-4e41-b235-d7ee62c10ecb": {"__data__": {"id_": "b51de4d6-88ef-4e41-b235-d7ee62c10ecb", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cb622561-3e0f-403b-bc21-2de33a8c5df1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9ca0fc8a181e41ea57c62ef33eaa18f50e7f49001ecc3048e63ef3ca2f663867", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "426cb3b2-542f-48c6-89c1-8cab6e11be67", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6250e20ab78ac345f45c98d32eeab0979e09dd2917b028e97210ff4e957764b7", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "105abccf-3823-40ce-a0c6-f362911d849f", "node_type": "1", "metadata": {}, "hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "class_name": "RelatedNodeInfo"}}, "hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "text": "Mathematical operators\n\nAn ``dim`` declaration allow arbitrary mathematical operations to be performed, e.g. let us declare that we want to subtract 5 from the 'alpha' dimension and then compute the ``min``:\n\n\n```python\nmath_op = (dim('alpha')-5).min()\nmath_op\n```\n\nPrinting the repr of the ``math_op`` we can see that it builds up an nested expression. To see the transform in action we will once again ``apply`` it on the points:\n\n\n```python\nmath_op.apply(ds)\n```\n\n ``dim`` objects implement most of the NumPy API, supports all standard mathematical operators and also support NumPy ufuncs.", "start_char_idx": 2, "end_char_idx": 594, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "105abccf-3823-40ce-a0c6-f362911d849f": {"__data__": {"id_": "105abccf-3823-40ce-a0c6-f362911d849f", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cda9473d-6c06-43d8-9a92-bda43d75d1e7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "31ea9f49904824375d8c89f14eb8797d9783e58957fb02e47fb84ee443053b5d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b51de4d6-88ef-4e41-b235-d7ee62c10ecb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8870a51d900f7eebb5939bcecdc972e64196a1852c8a173550c76e1adc67852f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b9f96fb2-a648-4e39-8fbb-247282f9606a", "node_type": "1", "metadata": {}, "hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "class_name": "RelatedNodeInfo"}}, "hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "text": "Custom functions\n\nIn addition to standard mathematical operators it is also possible to declare custom functions which can be applied by name. By default HoloViews ships with three commonly useful functions.", "start_char_idx": 2, "end_char_idx": 209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b9f96fb2-a648-4e39-8fbb-247282f9606a": {"__data__": {"id_": "b9f96fb2-a648-4e39-8fbb-247282f9606a", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "456577f6-aca4-49ed-b376-5a08c6b2e993", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d2e299be4653fb74798380cb65d576fe89dbc63928ee2a667153a84e27b9bbe3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "105abccf-3823-40ce-a0c6-f362911d849f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "99fc8314d4d8715e2bbcccaf03d30bf4f522109df545ef20efb6821690cec8fc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "76866dc0-df4c-492e-a47b-bca294ecfec8", "node_type": "1", "metadata": {}, "hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "class_name": "RelatedNodeInfo"}}, "hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "text": "**``norm``**\n\nUnity based normalization or features scaling normalizing the values to a range between 0-1 (optionally accepts ``min``/``max`` values as ``limits``, which are usually provided by the plotting system) using the expression:\n\n (values - min) / (max-min)\n \nfor example we can rescale the alpha values into a 0-1 range:\n\n\n```python\ndim('alpha').norm().apply(ds)\n```", "start_char_idx": 2, "end_char_idx": 383, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "76866dc0-df4c-492e-a47b-bca294ecfec8": {"__data__": {"id_": "76866dc0-df4c-492e-a47b-bca294ecfec8", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "44ad086b-ae06-4352-92d8-7bb42f277317", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0845650168455a62d97cc9fdf01569a5f859632d0ef900b7ccdb20d0058cb91f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b9f96fb2-a648-4e39-8fbb-247282f9606a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "33205083eef1671d79503094fdea20339ec817881582a3c00cea79f96513ff94", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "704dbfb6-08d3-4fe3-99e2-80561d59d84f", "node_type": "1", "metadata": {}, "hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "class_name": "RelatedNodeInfo"}}, "hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "text": "**``bin``**\n\nBins values using the supplied bins specified as the edges of each bin:\n\n\n```python\nbin_op = dim('alpha').bin([0, 5, 10])\n\nbin_op.apply(ds)\n```\n\nIt is also possible to provide explicit labels for each bin which will replace the bin center value:\n\n\n```python\ndim('alpha').bin([0, 5, 10], ['Bin 1', 'Bin 2']).apply(ds)\n```", "start_char_idx": 2, "end_char_idx": 335, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "704dbfb6-08d3-4fe3-99e2-80561d59d84f": {"__data__": {"id_": "704dbfb6-08d3-4fe3-99e2-80561d59d84f", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ca00568a-ba57-4f5e-8f1e-5db12d493ef7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "08c6167ba3066ce681825b2f18de6ecdc4816cbd9f6ca874e1074de19683c9c1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "76866dc0-df4c-492e-a47b-bca294ecfec8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e93dae13f21af2928f95145cdb382f22c204a6bde10a1cd79ef65b08732f6862", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c3f7fb08-8bcd-4a5c-bfae-d579d5e76a08", "node_type": "1", "metadata": {}, "hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "class_name": "RelatedNodeInfo"}}, "hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "text": "**``categorize``**\n\nMaps a number of discrete values onto the supplied list of categories, e.g. having binned the data into 2 discrete bins we can map them to two discrete marker types 'circle' and 'triangle':\n\n\n```python\ndim(bin_op).categorize({2.5: 'circle', 7.5: 'square'}).apply(ds)\n```\n\nThis can be very useful to map discrete categories to markers or colors.", "start_char_idx": 2, "end_char_idx": 366, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c3f7fb08-8bcd-4a5c-bfae-d579d5e76a08": {"__data__": {"id_": "c3f7fb08-8bcd-4a5c-bfae-d579d5e76a08", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b8a42e78-b067-4d27-9b54-1f18c46da411", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9fd8a378649b907e9f22186373eef8b907093bc15fccf4ca6b465c97f9c686eb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "704dbfb6-08d3-4fe3-99e2-80561d59d84f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e7a5d1ad3165336e273eb4d9773d2185e23a1cb3a14dada5f4dc53107117d463", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "977e3542-db5d-4d80-b0de-6c4db042a00c", "node_type": "1", "metadata": {}, "hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "class_name": "RelatedNodeInfo"}}, "hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "text": "Style mapping with ``dim`` transforms\n\nThis allows a huge amount of flexibility to express how the data should be mapped to visual style without directly modifying the data. To demonstrate this we will use some of the more complex:\n\n\n```python\npoints.opts(\n alpha =(dim('x')+0.2).norm(),\n angle =np.sin(dim('y'))*360,\n color =dim('x')**2,\n marker=dim('y').bin(bins, labels),\n size =dim('x')**dim('y')*20, width=500, height=500)\n```\n\nLet's summarize the style transforms we have applied:\n \n* **alpha**=``(dim('x')+0.2).norm()``: The alpha are mapped to the x-values offset by 0.2 and normalized.\n* **angle**=``np.sin(dim('x'))*360``: The angle of each marker is the sine of the y-values, multiplied by 360\n* **color**=``'x'``: The points are colormapped by square of their x-values.\n* **marker**=``dim('y').bin(bins, labels)``: The y-values are binned and each bin is assignd a unique marker.\n* **size**=``dim('x')**dim('y')*20``: The size of the points is mapped to the x-values exponentiated with the y-values and scaled by 20\n\nThese are simply illustrative examples, transforms can be chained in arbitrarily complex ways to achieve almost any mapping from dimension values to visual style.", "start_char_idx": 2, "end_char_idx": 1212, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "977e3542-db5d-4d80-b0de-6c4db042a00c": {"__data__": {"id_": "977e3542-db5d-4d80-b0de-6c4db042a00c", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "970db613-d63e-43b9-8508-fa578a9d36fe", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "44ddffa6ad6ea8a6ba527d7b4459812de2c6175e0192ca3788047e8ded256090", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c3f7fb08-8bcd-4a5c-bfae-d579d5e76a08", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cebf13cccdf2d50a325bb1de101f810a6f57c1b5700e4f48552e0877bb7a65b2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "db6a5f7a-b148-486d-ae63-83923dc2ece7", "node_type": "1", "metadata": {}, "hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "class_name": "RelatedNodeInfo"}}, "hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "text": "Colormapping\n\nColor cycles and styles are useful for categorical plots and when overlaying multiple subsets, but when we want to map data values to a color it is better to use HoloViews' facilities for color mapping. Certain image-like types will apply colormapping automatically; e.g. for ``Image``, ``QuadMesh`` or ``HeatMap`` types the first value dimension is automatically mapped to the color. In other cases the values to colormap can be declared by providing a ``color`` style option that specifies which dimension to map into the color value.", "start_char_idx": 2, "end_char_idx": 552, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "db6a5f7a-b148-486d-ae63-83923dc2ece7": {"__data__": {"id_": "db6a5f7a-b148-486d-ae63-83923dc2ece7", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d634312d-38ea-427e-80ad-483a9587b817", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ceda8fdbed003779ad6ca40f870719978ccd6a521e056c31a1eb64eb521116d7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "977e3542-db5d-4d80-b0de-6c4db042a00c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "71323fb50e98788b19ef84b6311cbb0619fc523c241df521535a8a7a3b58c138", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b98527fa-713b-4d02-8050-59515605dbae", "node_type": "1", "metadata": {}, "hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "class_name": "RelatedNodeInfo"}}, "hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "text": "Named colormaps\n\nHoloViews accepts colormaps specified either as an explicit list of hex or HTML colors, as a Matplotlib colormap object, or as the name of a bokeh, matplotlib, and colorcet palettes/colormap (which are available when the respective library is imported). The named colormaps available are listed here (suppressing the `_r` versions) and illustrated in detail in the separate Colormaps user guide:\n\n\n```python\ndef format_list(l):\n print(' '.join(sorted([k for k in l if not k.endswith('_r')])))\n\nformat_list(hv.plotting.list_cmaps())\n```\n\nTo use one of these colormaps simply refer to it by name with the ``cmap`` style option:\n\n\n```python\nls = np.linspace(0, 10, 400)\nxx, yy = np.meshgrid(ls, ls)\nbounds=(-1,-1,1,1) # Coordinate system: (left, bottom, right, top)\nimg = hv.Image(np.sin(xx)*np.cos(yy), bounds=bounds).opts(colorbar=True, width=400)\n\nimg.relabel('PiYG').opts(cmap='PiYG') + img.relabel('PiYG_r').opts(cmap='PiYG_r')\n```", "start_char_idx": 2, "end_char_idx": 958, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b98527fa-713b-4d02-8050-59515605dbae": {"__data__": {"id_": "b98527fa-713b-4d02-8050-59515605dbae", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a65274b4-74e4-4989-a1ab-19d00b668122", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ef04c35c70e4a0cd80d7b529899871b576422a26539917c23c82860d97c58557", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "db6a5f7a-b148-486d-ae63-83923dc2ece7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bc9663aa0037b59fd2829f490125b9fb2bf9b00696d3d3252f95e9b96e3380cc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "61b066c4-de2e-429d-8488-f63744d4024e", "node_type": "1", "metadata": {}, "hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "class_name": "RelatedNodeInfo"}}, "hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "text": "Custom colormaps\n\nYou can make your own custom colormaps by providing a list of hex colors:\n\n\n```python\nimg.relabel('Listed colors').opts(cmap=['#0000ff', '#8888ff', '#ffffff', '#ff8888', '#ff0000'], colorbar=True, width=400)\n```", "start_char_idx": 2, "end_char_idx": 231, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "61b066c4-de2e-429d-8488-f63744d4024e": {"__data__": {"id_": "61b066c4-de2e-429d-8488-f63744d4024e", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f9fd5fc4-b6fd-425d-bbd4-b2e01d81abd6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2060907a4e7718ee522b7db06d301a63e191f24dfce73c7ca49f4d5055ceb909", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b98527fa-713b-4d02-8050-59515605dbae", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6b7b8e954aa5fb79cd96517ec0db0822886173c89d67e2999ca87e5bea26bf20", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3fdacb27-614e-4040-b8f2-0ed0a61914cc", "node_type": "1", "metadata": {}, "hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "class_name": "RelatedNodeInfo"}}, "hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "text": "Discrete color levels\n\nLastly, existing colormaps can be made discrete by defining an integer number of ``color_levels``:\n\n\n```python\nimg.relabel('5 color levels').opts(cmap='PiYG', color_levels=5) + img.relabel('11 color levels').opts(cmap='PiYG', color_levels=11) \n```", "start_char_idx": 2, "end_char_idx": 272, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3fdacb27-614e-4040-b8f2-0ed0a61914cc": {"__data__": {"id_": "3fdacb27-614e-4040-b8f2-0ed0a61914cc", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "abcd8c71-bdcb-4ec9-bb6a-0d0c75730b20", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9b4af149ea78e1ef45cccac56473da5b656c4fc156f8d27765008195c39073e9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "61b066c4-de2e-429d-8488-f63744d4024e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f1f3407506d6d75951aaccc4558dc68d0eb3947c6f2f9bcdf15cbf77daf56859", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "40035029-ff47-4f58-aac4-b97605a166ba", "node_type": "1", "metadata": {}, "hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "class_name": "RelatedNodeInfo"}}, "hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "text": "Explicit color mapping\n\nSome elements work through implicit colormapping, the prime example being the ``Image`` type. However, other elements can be colormapped using style mapping instead, by setting the color to an existing dimension.", "start_char_idx": 2, "end_char_idx": 238, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "40035029-ff47-4f58-aac4-b97605a166ba": {"__data__": {"id_": "40035029-ff47-4f58-aac4-b97605a166ba", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "954cd817-1227-41d6-b48d-001b7f07f54c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c65c048ce45ce60f160db0fb45942d0555f6322d2653603681c5725d2927a8ed", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3fdacb27-614e-4040-b8f2-0ed0a61914cc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3b655fb092031c69b9404e3d2194529f3c8e8e10eb34fb525618261ff0618cc6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "90971db5-943d-4601-97d9-50abe53e1411", "node_type": "1", "metadata": {}, "hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "class_name": "RelatedNodeInfo"}}, "hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "text": "Continuous values\n\nIf we provide a continuous value for the ``color`` style option along with a continuous colormap, we can also enable a ``colorbar``:\n\n\n```python\npolygons = hv.Polygons([{('x', 'y'): hv.Ellipse(0, 0, (i, i)).array(), 'z': i} for i in range(1, 10)[::-1]], vdims='z')\n\npolygons.opts(color='z', colorbar=True, width=380)\n```", "start_char_idx": 2, "end_char_idx": 341, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "90971db5-943d-4601-97d9-50abe53e1411": {"__data__": {"id_": "90971db5-943d-4601-97d9-50abe53e1411", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a8b8d33c-4f09-4257-9abf-1b776adeb97c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "32d957efc70f4fa2d555d6eb4dd254fa2fe7f2a525ee8d5d1298bc25ac072ab6", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "40035029-ff47-4f58-aac4-b97605a166ba", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a2a6789634308b7e36a6ba6a597d03cc39823a28641ba5304c5255bd4a0f6401", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5492b41a-f1e7-4678-8b83-81354a2810ab", "node_type": "1", "metadata": {}, "hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "class_name": "RelatedNodeInfo"}}, "hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "text": "Categorical values\n\nConversely, when mapping a categorical value into a set of colors, we automatically get a legend (which can be disabled using the ``show_legend`` option):\n\n\n```python\ncategorical_points = hv.Points((np.random.rand(100), \n np.random.rand(100), \n np.random.choice(list('ABCD'), 100)), vdims='Category')\n\ncategorical_points.sort('Category').opts(\n color='Category', cmap='Category20', size=8, legend_position='left', width=500)\n```", "start_char_idx": 2, "end_char_idx": 515, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5492b41a-f1e7-4678-8b83-81354a2810ab": {"__data__": {"id_": "5492b41a-f1e7-4678-8b83-81354a2810ab", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "901375ad-fe14-4238-8212-3ee953625d83", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9159dd40f5ad6e5e8e8bf02fc45cb15769425e824856d1f7ff7411fde18133a0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "90971db5-943d-4601-97d9-50abe53e1411", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a48cc278266742ff263b417f789891d4b1e6d302e66d363d5bf590d5310d722c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "daaadde5-3a03-42a3-a65e-1fd36ba4cc1b", "node_type": "1", "metadata": {}, "hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "class_name": "RelatedNodeInfo"}}, "hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "text": "Explicit color mapping\n\nInstead of using a listed colormap, you can provide an explicit mapping from category to color. Here we will map the categories 'A', 'B', 'C' and 'D' to specific colors:\n\n\n```python\nexplicit_mapping = {'A': 'blue', 'B': 'red', 'C': 'green', 'D': 'purple'}\n\ncategorical_points.sort('Category').opts(color='Category', cmap=explicit_mapping, size=8)\n```", "start_char_idx": 2, "end_char_idx": 376, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "daaadde5-3a03-42a3-a65e-1fd36ba4cc1b": {"__data__": {"id_": "daaadde5-3a03-42a3-a65e-1fd36ba4cc1b", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4b294cc8-2db0-43c1-bbbb-f1491070f67b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ab7b290d107152959fa8c940a2d31b4507468b681109cdfb136f9462ea3d618e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5492b41a-f1e7-4678-8b83-81354a2810ab", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "eaab0e205a3ad1ab6c63f37508b71083d7c722805eba67457f2fe26884cb5ea0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f345421c-d17e-4490-92ec-b72ee40a72c8", "node_type": "1", "metadata": {}, "hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "class_name": "RelatedNodeInfo"}}, "hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "text": "Custom color intervals\n\nIn addition to a simple integer defining the number of discrete levels, the ``color_levels`` option also allows defining a set of custom intervals. This can be useful for defining a fixed scale, such as the Saffir-Simpson hurricane wind scale. Below we declare the color levels along with a list of colors, declaring the scale. Note that the levels define the intervals to map each color to, so if there are N colors we have to define N+1 levels.\n\nHaving defined the scale we can generate a theoretical hurricane path with wind speed values and use the ``color_levels`` and ``cmap`` to supply the custom color scale:\n\n\n```python\nlevels = [0, 38, 73, 95, 110, 130, 156, 999] \ncolors = ['#5ebaff', '#00faf4', '#ffffcc', '#ffe775', '#ffc140', '#ff8f20', '#ff6060']\n\npath = [\n (-75.1, 23.1, 0), (-76.2, 23.8, 0), (-76.9, 25.4, 0), (-78.4, 26.1, 39), (-79.6, 26.2, 39),\n (-80.3, 25.9, 39), (-82.0, 25.1, 74), (-83.3, 24.6, 74), (-84.7, 24.4, 96), (-85.9, 24.8, 111),\n (-87.7, 25.7, 111), (-89.2, 27.2, 131), (-89.6, 29.3, 156), (-89.6, 30.2, 156), (-89.1, 32.6, 131),\n (-88.0, 35.6, 111), (-85.3, 38.6, 96)\n]\n\nhv.Path([path], vdims='Wind Speed').opts(\n color='Wind Speed', color_levels=levels, cmap=colors, line_width=8, colorbar=True, width=450\n)\n```", "start_char_idx": 2, "end_char_idx": 1299, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f345421c-d17e-4490-92ec-b72ee40a72c8": {"__data__": {"id_": "f345421c-d17e-4490-92ec-b72ee40a72c8", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a9b114ad-0039-4d8d-822d-a573af279002", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "11da14625b35cbcae0e19cff832f7eeba83cd79072fad8e87f6893e1b1154343", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "daaadde5-3a03-42a3-a65e-1fd36ba4cc1b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1ff9fd3320e54535c2843a64f532c6797879fbfddfb3d1f830a72d9d692370b8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ce5b09a1-105f-4de1-8639-100058cae41e", "node_type": "1", "metadata": {}, "hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "class_name": "RelatedNodeInfo"}}, "hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "text": "Setting color ranges\n\nFor an image-like element, color ranges are determined by the range of the `z` value dimension, and they can thus be controlled using the ``.redim.range`` method with `z`. As an example, let's set some values in the image array to NaN and then set the range to clip the data at 0 and 0.9. By declaring the ``clipping_colors`` option we can control what colors are used for NaN values and for values above and below the defined range:\n\n\n```python\nclipping = {'min': 'red', 'max': 'green', 'NaN': 'gray'}\noptions = dict(cmap='Blues', colorbar=True, width=300, height=230, axiswise=True)\n\narr = np.sin(xx)*np.cos(yy)\narr[:190, :127] = np.nan\n\noriginal = hv.Image(arr, bounds=bounds).opts(**options)\ncolored = original.opts(clipping_colors=clipping, clone=True)\nclipped = colored.redim.range(z=(0, 0.9))\n\noriginal + colored + clipped\n```\n\nBy default (left plot above), the min and max values in the array map to the first color (white) and last color (dark blue) in the colormap, and NaNs are ``'transparent'`` (an RGBA tuple of (0, 0, 0, 0)), revealing the underlying plot background. When the specified `clipping_colors` are supplied (middle plot above), NaN values are now colored gray, but the plot is otherwise the same because the autoranging still ensures that no value is mapped outside the available color range. Finally, when the `z` range is reduced (right plot above), the color range is mapped from a different range of numerical `z` values, and some values now fall outside the range and are thus clipped to red or green as specified.", "start_char_idx": 2, "end_char_idx": 1572, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ce5b09a1-105f-4de1-8639-100058cae41e": {"__data__": {"id_": "ce5b09a1-105f-4de1-8639-100058cae41e", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "37a712a3-b2d8-4781-99ac-ea6d1fb3c2f8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "20823d032de3239001fe854826d3c7c9df454d2280f4ebafaa7fd04cdb30d0af", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f345421c-d17e-4490-92ec-b72ee40a72c8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bf96d61aa005ea40ce0f54cd362485115783a2fc5fca9cb1666cf7a554da8953", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "90404a2f-346a-44ed-9e86-664a43c3ee62", "node_type": "1", "metadata": {}, "hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "class_name": "RelatedNodeInfo"}}, "hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "text": "Normalization modes\n\nWhen using a colormap, there are three available color normalization or `cnorm` options to determine how numerical values are mapped to the range of colors in the colorbar:\n\n* `linear`: Simple linear mapping (used by default)\n* `log`: Logarithmic mapping\n* `eq_hist`: Histogram-equalized mapping\n\nThe following cell defines an `Image` containing random samples drawn from a normal distribution (mean of 3) with a square of constant value 100 in the middle, shown with the three `cnorm` modes:\n\n\n```python\nnp.random.seed(42)\ndata = np.random.normal(loc=3, scale=0.3, size=(100,100))\nprint(\"Mean value of random samples is {mean:.3f}, \".format(mean=np.mean(data))\n + \"which is much lower\\nthan the black square in the center (value 100).\")\ndata[45:55,45:55] = 100\n\nimopts=dict(colorbar=True, xaxis='bare', yaxis='bare', height=160, width=200)\npattern = hv.Image(data)\n\n( pattern.options(cnorm='linear', title='linear', **imopts) \n + pattern.options(cnorm='log', title='log', **imopts)\n + pattern.options(cnorm='eq_hist', title='eq_hist', **imopts))\n```\n\nThe `'linear'` mode is very easy to interpret numerically, with colors mapped to numerical values linearly as indicated. However, as you can see in this case, high-value outliers like the square here can make it difficult to see any structure in the remaining values. The Gaussian noise values all map to the first few colors at the bottom of the colormap, resulting in a background that is almost uniformly yellow even though we know the data includes a variety of different values in the background area.\n\nIn the `'log'` mode, the random values are a little easier to see but these samples still use a small portion of the colormap. Logarithmic colormaps are most useful when you know that you are plotting data with an approximately logarithmic distribution.\n\nIn the `'eq_hist'` mode, colors are nonlinearly mapped according to the actual distribution of values in the plot, such that each color in the colormap represents an approximately equal number of values in the plot (here with few or no colors reserved for the nearly empty range between 10 and 100). In this mode both the outliers and the overall low-amplitude noise can be seen clearly, but the non-linear distortion can make the colors more difficult to interpret as numerical values.\n\nWhen working with unknown data distributions, it is often a good idea to try all three of these modes, using `eq_hist` to be sure that you are seeing all of the patterns in the data, then either `log` or `linear` (depending on which one is a better match to your distribution) with the values clipped to the range of values you want to show.", "start_char_idx": 2, "end_char_idx": 2682, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "90404a2f-346a-44ed-9e86-664a43c3ee62": {"__data__": {"id_": "90404a2f-346a-44ed-9e86-664a43c3ee62", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e7d3ebff-1975-447b-a165-f28ade396ddc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a6083ebc7561d035eb229c51c54b79734f43e0478b722305d321324e1e8d6d5f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ce5b09a1-105f-4de1-8639-100058cae41e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "de327c73769ef2da081609b73fa28e79cc7504e2fa908f4484c5835349f762a5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "48af193b-bcf6-4c8c-a995-cfed245014c7", "node_type": "1", "metadata": {}, "hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "class_name": "RelatedNodeInfo"}}, "hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "text": "Other colormapping options\n\n* ``clim_percentile``: Percentile value to compute colorscale robust to outliers. If `True`, uses 2nd and 98th percentile; otherwise uses the specified percentile value. \n* ``cnorm``: Color normalization to be applied during colormapping. Allows switching between 'linear', 'log', and 'eq_hist'.\n* ``logz``: Enable logarithmic color scale (same as `cnorm='log'`; to be deprecated at some point)\n* ``symmetric``: Ensures that the color scale is centered on zero (e.g. ``symmetric=True``)", "start_char_idx": 2, "end_char_idx": 516, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "48af193b-bcf6-4c8c-a995-cfed245014c7": {"__data__": {"id_": "48af193b-bcf6-4c8c-a995-cfed245014c7", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "128938f1-3816-4f5c-8ef2-0ff3d9e07aae", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6b9231e763962e54e314ab18c42c49a6cdd432d3d905b6c8cc591b305a3a99e7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "90404a2f-346a-44ed-9e86-664a43c3ee62", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b2493bc7ae4af541a573a8638eba23937e5fd463a08e1d4df6c1771cbf51c377", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3364e705-40c2-436a-977d-73241ab7c9e6", "node_type": "1", "metadata": {}, "hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "class_name": "RelatedNodeInfo"}}, "hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "text": "Cycles and Palettes\n\nFrequently we want to plot multiple subsets of data, which is made easy by using ``Overlay`` and ``NdOverlay`` objects. When overlaying multiple elements of the same type they will need to be distinguished visually, and HoloViews provides two mechanisms for styling the different subsets automatically in those cases:\n\n* ``Cycle``: A Cycle defines a list of discrete styles\n* ``Palette``: A Palette defines a continuous color space which will be sampled discretely", "start_char_idx": 2, "end_char_idx": 487, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3364e705-40c2-436a-977d-73241ab7c9e6": {"__data__": {"id_": "3364e705-40c2-436a-977d-73241ab7c9e6", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6a83f03f-375c-411c-8fda-9dbe5be1af42", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6685ee7a22feec2a5f25b46374460efa8b02c24723c67ded0a44e617783ac67b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "48af193b-bcf6-4c8c-a995-cfed245014c7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8f38f623fe7bc9cb94c951efd063d35765d29179c39daf5ccc1426eff4131bbb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a5d6c4b3-f107-439b-94e3-20946aba7cad", "node_type": "1", "metadata": {}, "hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "class_name": "RelatedNodeInfo"}}, "hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "text": "Cycle\n\nA ``Cycle`` can be applied to any of the style options on an element. By default, most elements define a ``Cycle`` on the color property. Here we will create an overlay of three ``Points`` objects using the default cycles, then display it using the default cycles along with a copy where we changed the dot color and size using a custom ``Cycle``:\n\n\n```python\npoints = (\n hv.Points(np.random.randn(50, 2) ) *\n hv.Points(np.random.randn(50, 2) + 1 ) *\n hv.Points(np.random.randn(50, 2) * 0.5)\n)\n\ncolor_cycle = hv.Cycle(['red', 'green', 'blue'])\npoints + points.opts(opts.Points(color=color_cycle), clone=True)\n```\n\nHere color has been changed to cycle over the three provided colors, while size has been specified as a constant (though a cycle like `hv.Cycle([2,5,10])` could just as easily have been used for the size as well).", "start_char_idx": 2, "end_char_idx": 851, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a5d6c4b3-f107-439b-94e3-20946aba7cad": {"__data__": {"id_": "a5d6c4b3-f107-439b-94e3-20946aba7cad", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5c149c1f-e615-4ab2-a761-4519d5667d26", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e52d09eb114a3187ecd17affbaa88029b4dca6bd5012f94fddee2a8c7ab63226", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3364e705-40c2-436a-977d-73241ab7c9e6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a05cff8d25363fdfdcb83ab3e56f2f6e8b6da1506d75f6450179f3d0f83766a5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bc4421e2-1556-4c3e-897d-544d4bb9a7ae", "node_type": "1", "metadata": {}, "hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "class_name": "RelatedNodeInfo"}}, "hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "text": "Defaults\n\nIn addition to defining custom color cycles by explicitly defining a list of colors, ``Cycle`` also defines a list of default Cycles generated from bokeh Palettes and matplotlib colormaps:\n\n\n```python\nformat_list(hv.Cycle.default_cycles.keys())\n```\n\n(Here some of these Cycles have a reversed variant ending in `_r` that is not shown.)\n\nTo use one of these default Cycles simply construct the Cycle with the corresponding key:\n\n\n```python\nxs = np.linspace(0, np.pi*2)\ncurves = hv.Overlay([hv.Curve(np.sin(xs+p)) for p in np.linspace(0, np.pi, 10)])\n\ncurves.opts(opts.Curve(color=hv.Cycle('Category20'), width=600))\n```", "start_char_idx": 2, "end_char_idx": 630, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc4421e2-1556-4c3e-897d-544d4bb9a7ae": {"__data__": {"id_": "bc4421e2-1556-4c3e-897d-544d4bb9a7ae", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e05eddbe-fba2-4889-a7f1-8264b84a1402", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "71e14610a0040b0df3da6244ce0de214fb249b3110961ccc43d4cc4253608bbc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a5d6c4b3-f107-439b-94e3-20946aba7cad", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5322d6ed73857f7f7d5b54c52980b4eb4f83b025b20fae13998a335cc1a0d8e0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bc41c31b-fd5c-4729-becf-0063f969885a", "node_type": "1", "metadata": {}, "hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "class_name": "RelatedNodeInfo"}}, "hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "text": "Markers and sizes\n\nThe above examples focus on color Cycles, but Cycles may be used to define any style option. Here let's use them to cycle over a number of marker styles and sizes, which will be expanded by cycling over each item independently. In this case we are cycling over three Cycles, resulting in the following style combinations:\n\n1. ``{'color': '#30a2da', 'marker': 'x', 'size': 10}``\n2. ``{'color': '#fc4f30', 'marker': '^', 'size': 5}``\n3. ``{'color': '#e5ae38', 'marker': '+', 'size': 10}``\n\n\n```python\ncolor = hv.Cycle(['#30a2da', '#fc4f30', '#e5ae38'])\nmarkers = hv.Cycle(['x', '^', '+'])\nsizes = hv.Cycle([10, 5])\npoints.opts(opts.Points(line_color=color, marker=markers, size=sizes))\n```", "start_char_idx": 2, "end_char_idx": 708, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc41c31b-fd5c-4729-becf-0063f969885a": {"__data__": {"id_": "bc41c31b-fd5c-4729-becf-0063f969885a", "embedding": null, "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "78bd63f9-3645-4535-8e06-6ca17dd50e73", "node_type": "4", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b655f495283addc1d51798f1b53c22577baed684ee90524eb30ddad2cbf5a759", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bc4421e2-1556-4c3e-897d-544d4bb9a7ae", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "45dca3d32b371c4c730f3f30290597bca064c657a39c94ded203d5ee1af28ceb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "743b1bfe-6967-4c76-bc26-4cc5c442c7b8", "node_type": "1", "metadata": {}, "hash": "9a270b0c6aaad96e1209968864dace6b9983cc98a7878762959b5b1a470a1c26", "class_name": "RelatedNodeInfo"}}, "hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "text": "Palettes\n\nPalettes are similar to cycles, but treat a set of colors as a continuous colorspace to be sampled at regularly spaced intervals. Again they are made automatically available from existing colormaps (with `_r` versions also available):\n\n\n```python\nformat_list(hv.Palette.colormaps.keys())\n```\n\n(Here each colormap `X` has a corresponding version `X_r` with the values reversed; the `_r` variants are suppressed above.)\n\nAs a simple example we will create a Palette from the Spectral colormap and apply it to an Overlay of 6 Ellipses. Comparing it to the Spectral ``Cycle`` we can immediately see that the Palette covers the entire color space spanned by the Spectral colormap, while the Cycle instead uses the first 6 colors of the Spectral colormap:\n\n\n```python\nellipses = hv.Overlay([hv.Ellipse(0, 0, s) for s in range(6)])\n\nellipses.relabel('Palette').opts(opts.Ellipse(color=hv.Palette('Spectral'), line_width=5), clone=True) +\\\nellipses.relabel('Cycle' ).opts(opts.Ellipse(color=hv.Cycle( 'Spectral'), line_width=5), clone=True)\n```\n\nThus if you want to have have a discrete set of distinguishable colors starting from a list of colors that vary slowly and continuously, you should usually supply it as a Palette, not a Cycle. Conversely, you should use a Cycle when you want to iterate through a specific list of colors, in order, without skipping around the list like a Palette will.", "start_char_idx": 2, "end_char_idx": 1405, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "743b1bfe-6967-4c76-bc26-4cc5c442c7b8": {"__data__": {"id_": "743b1bfe-6967-4c76-bc26-4cc5c442c7b8", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "faa439a6-e9a5-4127-ae38-4ad049af31fd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "03875d62356fdf7cfff47fa815d45f1f6539a27c7984641212d5b375f2fabc75", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bc41c31b-fd5c-4729-becf-0063f969885a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "443010eba8adad88d819f9f462afbb4e4055111a483544810678bb2d2158ab32", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "66912124-c458-4429-b537-682009940df8", "node_type": "1", "metadata": {}, "hash": "ece8c3c40187f6611c3166bb6893a60a6991c2cea591b41ade46fb006ad7fee2", "class_name": "RelatedNodeInfo"}}, "hash": "9a270b0c6aaad96e1209968864dace6b9983cc98a7878762959b5b1a470a1c26", "text": "Dimensioned Containers\n\nSo far we've seen how to wrap data in elements and compose those Elements into Overlays and Layout. In this guide will see how we can use containers to hold Elements and declare parameter spaces to explore multi-dimensional parameter spaces visually. These containers allow faceting your data by one or more variables and exploring the resulting parameter space with widgets, positioning plots on a grid or simply laying them out consecutively. Here we will introduce the ``HoloMap``, ``NdOverlay``, ``NdLayout`` and ``GridSpace``, which make all this possible.\n\n\n```python\nimport numpy as np\nimport holoviews as hv\n\nfrom holoviews import opts\n\nhv.extension('bokeh')\n\nopts.defaults(opts.Curve(line_width=1))\n```", "start_char_idx": 2, "end_char_idx": 738, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "66912124-c458-4429-b537-682009940df8": {"__data__": {"id_": "66912124-c458-4429-b537-682009940df8", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cf590306-fff5-496c-acda-56abb66b726a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "50374236bfb813f6a91148a422854e427e5db83b30c0548ff9439c00a1d6607d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "743b1bfe-6967-4c76-bc26-4cc5c442c7b8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9a270b0c6aaad96e1209968864dace6b9983cc98a7878762959b5b1a470a1c26", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "849cfeb4-e3a7-48c6-8e08-e9bb70e22418", "node_type": "1", "metadata": {}, "hash": "a6752ea5b76507012940e963de7b9f08f06fdc661c3815bfd7d1fb24304cc6bb", "class_name": "RelatedNodeInfo"}}, "hash": "ece8c3c40187f6611c3166bb6893a60a6991c2cea591b41ade46fb006ad7fee2", "text": "Declaring n-dimensional collections\n\nPython users will be familiar with dictionaries as a way to collect data together in a conveniently accessible manner. Unlike NumPy arrays, dictionaries are sparse and do not have to be declared with a fixed size. The dimensioned types are therefore closely modeled on dictionaries but support n-dimensional keys.\n\nTherefore they allow you to express a mapping between a multi-variable key and other viewable objects, letting you structure your multi-dimensional data to facilitate exploration. The key here can represent anything from an ID, a filename, a parameter controlling some custom processing to some category representing a subset of your data.\n\nAs a simple example we will use a function which varies with multiple parameters, in this case a function which generates a simple frequency modulation signal, with two main parameters a carrier frequency and a modulation frequency (see Wikipedia). All we have to know here is that the function generates a ``Curve`` based on the parameters that we give it.\n\n\n```python\ndef fm_modulation(f_carrier=220, f_mod=220, mod_index=1, length=0.1, sampleRate=2000):\n sampleInc = 1.0/sampleRate\n x = np.arange(0,length, sampleInc)\n y = np.sin(2*np.pi*f_carrier*x + mod_index*np.sin(2*np.pi*f_mod*x))\n return hv.Curve((x, y), 'Time', 'Amplitude')\n```\n\nNext we have to declare the parameter space we want to explore. Combinatorial parameter spaces can quickly get very large so here we will declare just 5 carrier frequencies and 5 modulation frequencies. If we have many more parameters or a larger set of values we could instead use a ``DynamicMap``, which does lazy evaluation and is introduced in the next section on Live Data.\n\nHowever when working with relatively small datasets a ``HoloMap`` is preferred as ``HoloMap``s can be exported to static HTML. To declare the data we use a dictionary comprehension to compute an FM modulation curve for each combination of carrier and modulation frequencies and then pass that dictionary to a newly declared ``HoloMap``, which declares our two parameters as key dimensions. If we want to customize the starting value of the widgets a ``default`` value may be supplied on the ``Dimension`` objects:\n\n\n```python\nf_carrier = np.linspace(20, 60, 3)\nf_mod = np.linspace(20, 100, 5)\n\ncurve_dict = {(fc, fm): fm_modulation(fc, fm) for fc in f_carrier for fm in f_mod}\n\nkdims = [hv.Dimension(('f_carrier', 'Carrier frequency'), default=40),\n hv.Dimension(('f_mod', 'Modulation frequency'), default=60)]\nholomap = hv.HoloMap(curve_dict, kdims=kdims)\nholomap.opts(opts.Curve(width=600))\n```\n\nAny numeric key dimension values will automatically generate sliders while any non-numeric value will present you with a dropdown widget to select between the values. A HoloMap is therefore an easy way to quickly explore a parameter space. Since only one ``Curve`` is on the screen at the same time it is difficult to compare the data, we can however easily facet the data in other ways.", "start_char_idx": 2, "end_char_idx": 3021, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "849cfeb4-e3a7-48c6-8e08-e9bb70e22418": {"__data__": {"id_": "849cfeb4-e3a7-48c6-8e08-e9bb70e22418", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8bdfe187-67ac-49d8-bee4-8f4f3958c581", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6a95966c4f8afd26a7c81ddfe94e166e3258aa011e36ba58ae6eff6bcaa23436", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "66912124-c458-4429-b537-682009940df8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ece8c3c40187f6611c3166bb6893a60a6991c2cea591b41ade46fb006ad7fee2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "198d7494-ff6f-4b5c-9087-b48afa279a16", "node_type": "1", "metadata": {}, "hash": "f0ed8a9b2fd581ce27abce2bf31611bffcc3b3934880d34f95c9a2e7ab468b95", "class_name": "RelatedNodeInfo"}}, "hash": "a6752ea5b76507012940e963de7b9f08f06fdc661c3815bfd7d1fb24304cc6bb", "text": "Casting between n-dimensional containers\n\nExploring a parameter space using widgets is one of the most flexible approaches but as we noted above it also makes it difficult to compare between different parameter values. HoloViews therefore supplies several container objects, which behave similarly to a ``HoloMap`` but have a different visual representation:\n\n* NdOverlay - An n-dimensional container which overlays the elements\n* NdLayout - An n-dimensional container which displays the data in separate plot axes and adds titles for each value\n* GridSpace - A 1D or 2D container which lays out up to two dimensions on a grid.\n\nSince all these classes share the same baseclass we can trivially cast between them, e.g. we can cast the ``HoloMap`` to a ``GridSpace``.\n\n\n```python\ngrid = hv.GridSpace(holomap)\ngrid.opts(\n opts.GridSpace(plot_size=75),\n opts.Curve(width=100))\n```\n\nSimilarly we can select just a few values and lay the data out in an ``NdLayout``:\n\n\n```python\nndlayout = hv.NdLayout(grid[20, 20:81])\nndlayout.opts(opts.Curve(width=500, height=200)).cols(2)\n```", "start_char_idx": 2, "end_char_idx": 1083, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "198d7494-ff6f-4b5c-9087-b48afa279a16": {"__data__": {"id_": "198d7494-ff6f-4b5c-9087-b48afa279a16", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0cafb10b-b577-49e1-b565-eb9c3c830c39", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3e36dc3c79fbbdfb79cf94f6aa5acada59f1eae2bdca7b6d897c09ddc9bd517b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "849cfeb4-e3a7-48c6-8e08-e9bb70e22418", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a6752ea5b76507012940e963de7b9f08f06fdc661c3815bfd7d1fb24304cc6bb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "53e769eb-00a6-4ee5-a95f-a7e61037bddd", "node_type": "1", "metadata": {}, "hash": "7b6fb9f8255b0540844642bcd415e9328c38f5b769dc5b845ac54a9b0ca079be", "class_name": "RelatedNodeInfo"}}, "hash": "f0ed8a9b2fd581ce27abce2bf31611bffcc3b3934880d34f95c9a2e7ab468b95", "text": "Faceting by dimension\n\nCasting between container types as we did above allows us to facet all dimensions but often it is more desirable to facet a specific dimension in some way. We may for example want to overlay the carrier frequencies, while still having a slider vary the modulation frequencies. For this purpose ``HoloMap`` and ``DynamicMap`` have ``.overlay``, ``.grid`` and ``.layout`` methods, which accept one or more dimensions as input, e.g. here we overlay the carrier frequencies:\n\n\n```python\nholomap.overlay('f_carrier').opts(width=600)\n```\n\nWe can chain these faceting operations but we have to be careful about the order. We should always ``overlay`` first and only then use ``.grid`` or ``.layout`` . To better understand why that is, look at the Building Composite objects guide, for now it suffices to say that objects are built to nest in a specific order. Here we will ``overlay`` the carrier frequencies and ``grid`` the modulation frequency:\n\n\n```python\ngridspace = holomap.overlay('f_carrier').grid('f_mod')\ngridspace.opts(opts.Curve(width=200,height=200))\n```\n\nThis ability to facet data in different ways becomes incredibly useful when working with tabular and gridded datasets, which vary by multiple dimensions. By faceting the data by one or more dimensions and utilizing the wide range of elements we can quickly explore huge and complex datasets particularly when working with using ``DynamicMap``, which allows you to define dynamic and lazy data processing pipelines, which visualize themselves and allow you to build complex interactive dashboards.", "start_char_idx": 2, "end_char_idx": 1584, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "53e769eb-00a6-4ee5-a95f-a7e61037bddd": {"__data__": {"id_": "53e769eb-00a6-4ee5-a95f-a7e61037bddd", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9e50b097-2746-4afa-8bb3-fe9839b30d78", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dfef9ecbd41422ebb89bb3987a7c0658c1a2e6dd438687597bafa9afc172a0cf", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "198d7494-ff6f-4b5c-9087-b48afa279a16", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f0ed8a9b2fd581ce27abce2bf31611bffcc3b3934880d34f95c9a2e7ab468b95", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9d0c0b2b-7e0d-4733-8b74-6a9673a149c3", "node_type": "1", "metadata": {}, "hash": "a5321e44bbdc7b0ebbfb8e96391adb6bf07c3a0e184e9f936594eba32d6e8a21", "class_name": "RelatedNodeInfo"}}, "hash": "7b6fb9f8255b0540844642bcd415e9328c38f5b769dc5b845ac54a9b0ca079be", "text": "Methods", "start_char_idx": 2, "end_char_idx": 9, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9d0c0b2b-7e0d-4733-8b74-6a9673a149c3": {"__data__": {"id_": "9d0c0b2b-7e0d-4733-8b74-6a9673a149c3", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "17e8212c-e9b6-453e-831f-854b3543a430", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "53765a01e8d932e2bf0ff6e171b292ef11f4116de0e1eb26fa18573f750b73a8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "53e769eb-00a6-4ee5-a95f-a7e61037bddd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7b6fb9f8255b0540844642bcd415e9328c38f5b769dc5b845ac54a9b0ca079be", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a6d53204-f04a-43d9-9edd-cb6cb61338c7", "node_type": "1", "metadata": {}, "hash": "7332981ad6013dcab87eef279fecd73542f3115bfb38acb163d98ceae46fba5b", "class_name": "RelatedNodeInfo"}}, "hash": "a5321e44bbdc7b0ebbfb8e96391adb6bf07c3a0e184e9f936594eba32d6e8a21", "text": "Selecting by value\n\nJust like ``Elements`` dimensioned containers can be sliced and indexed by value using the regular indexing syntax and the ``select`` method. As a simple example we can index the carrier frequency 20 and modulation frequency 40 using both the indexing and select syntax:\n\n\n```python\nlayout = holomap[20, 40] + holomap.select(f_carrier=20, f_mod=40)\nlayout.opts(opts.Curve(width=400))\n```\n\nFor more detail on indexing both Elements and containers see the Indexing and Selecting user guide.", "start_char_idx": 2, "end_char_idx": 510, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a6d53204-f04a-43d9-9edd-cb6cb61338c7": {"__data__": {"id_": "a6d53204-f04a-43d9-9edd-cb6cb61338c7", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f0a99e96-b455-443c-b9de-922fdd39a6f5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "38745dd2f6bf09cb92d6171fc811beb1ab1969de3197e96f2c619adf4127d87e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9d0c0b2b-7e0d-4733-8b74-6a9673a149c3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a5321e44bbdc7b0ebbfb8e96391adb6bf07c3a0e184e9f936594eba32d6e8a21", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d502eba6-5c29-40eb-aecd-bb6aa08fa982", "node_type": "1", "metadata": {}, "hash": "d005ee665680ca5b23eccd8279d11575145aae80b9029bd2259ba255e956f8b5", "class_name": "RelatedNodeInfo"}}, "hash": "7332981ad6013dcab87eef279fecd73542f3115bfb38acb163d98ceae46fba5b", "text": "Collapsing an n-dimensional container\n\nIf we inspect one of the containers we created in the examples above we can clearly see the structure and the dimensionality of each container and the underlying ``Curve`` elements:\n\n\n```python\nprint(grid)\n```\n\nSince this simply represents a multi-dimensional parameter space we can collapse this datastructure into a single `Dataset` containing columns for each of the dimensions we have declared:\n\n\n```python\nds = grid.collapse()\nds.data.head()\n```\n\nA ``Dataset`` is an element type which does not itself have a visual representation and may contain any type of data supported by HoloViews interfaces.", "start_char_idx": 2, "end_char_idx": 644, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d502eba6-5c29-40eb-aecd-bb6aa08fa982": {"__data__": {"id_": "d502eba6-5c29-40eb-aecd-bb6aa08fa982", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9b92ef93-0802-4512-8762-88ac51492d41", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ded33818b0899d7fc0a7e5158d41aa5a7167431f935892cb3fa5ef0369b309c1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a6d53204-f04a-43d9-9edd-cb6cb61338c7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7332981ad6013dcab87eef279fecd73542f3115bfb38acb163d98ceae46fba5b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a365afb9-3340-4aaa-8f60-d64b18e3e402", "node_type": "1", "metadata": {}, "hash": "005baa262512f8f9b7c576ffb84eb310f63a3f6e495d7ba744f0ccda9e9ab727", "class_name": "RelatedNodeInfo"}}, "hash": "d005ee665680ca5b23eccd8279d11575145aae80b9029bd2259ba255e956f8b5", "text": "Reindexing containers\n\nSomething we might want to do quite frequently is to change the order of dimensions in a dimensioned container. Let us inspect the key dimensions on our HoloMap from above:\n\n\n```python\nholomap.kdims\n```\n\nUsing the ``reindex`` method we can easily change the order of dimensions:\n\n\n```python\nreindexed = holomap.reindex(['f_mod', 'f_carrier'])\nreindexed.kdims\n```", "start_char_idx": 2, "end_char_idx": 387, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a365afb9-3340-4aaa-8f60-d64b18e3e402": {"__data__": {"id_": "a365afb9-3340-4aaa-8f60-d64b18e3e402", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c251b1e5-21d4-4925-bd40-67ffff3489f9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "73bbd0c4566bce56a5e5db2264f011859dec5f7d2d6023c08d7cc327fba027d1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d502eba6-5c29-40eb-aecd-bb6aa08fa982", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d005ee665680ca5b23eccd8279d11575145aae80b9029bd2259ba255e956f8b5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "666427f9-f933-47c3-a868-3300a5c64914", "node_type": "1", "metadata": {}, "hash": "fb24d49906b75ecca7a7adbacc8bcf12360782de10c9f026b01305cebec8176c", "class_name": "RelatedNodeInfo"}}, "hash": "005baa262512f8f9b7c576ffb84eb310f63a3f6e495d7ba744f0ccda9e9ab727", "text": "Add dimensions to a container\n\nAnother common operation is adding a new dimension to a HoloMap, which can be useful when you want to merge two HoloMaps which vary by yet another dimension. The ``add_dimension`` method takes the new dimension name, the position in the list of key dimensions and the actual value as arguments:\n\n\n```python\nnew_holomap = holomap.add_dimension('New dimension', dim_pos=0, dim_val=1)\nnew_holomap.kdims\n```\n\nAs you can see the 'New dimension' was added at position zero.", "start_char_idx": 2, "end_char_idx": 500, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "666427f9-f933-47c3-a868-3300a5c64914": {"__data__": {"id_": "666427f9-f933-47c3-a868-3300a5c64914", "embedding": null, "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f06861a2-a831-490e-826f-02f005f04700", "node_type": "4", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "15a9f0b00548490b8a72ac5c15bdc4923dd5727420c681db1a969813d705299a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a365afb9-3340-4aaa-8f60-d64b18e3e402", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "005baa262512f8f9b7c576ffb84eb310f63a3f6e495d7ba744f0ccda9e9ab727", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "64c81fcf-c1fd-46cd-ad06-0929f59eb5e2", "node_type": "1", "metadata": {}, "hash": "d6229cb18ce1091309290603b9ecbe3448a3c79d65976775c7e354e4f2a80e28", "class_name": "RelatedNodeInfo"}}, "hash": "fb24d49906b75ecca7a7adbacc8bcf12360782de10c9f026b01305cebec8176c", "text": "Onwards\n\nAs we have seen Dimensioned containers make it easy to explore multi-dimensional datasets by mapping the dimensions onto visual layers (`NdOverlay`), 2D grid axes (`GridSpace`), widgets (`HoloMap`) or an arbitrary layout (`NdLayout`). In the next section we will discover how to construct composite objects of heterogeneous data.", "start_char_idx": 2, "end_char_idx": 340, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "64c81fcf-c1fd-46cd-ad06-0929f59eb5e2": {"__data__": {"id_": "64c81fcf-c1fd-46cd-ad06-0929f59eb5e2", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cc308c70-6355-4301-ac47-a6962e476be3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "171374d83e9da75fb90de56d12dae5b84b0321652c3d72893970e15bc9dd0315", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "666427f9-f933-47c3-a868-3300a5c64914", "node_type": "1", "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fb24d49906b75ecca7a7adbacc8bcf12360782de10c9f026b01305cebec8176c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "87d4ed4a-ada6-48be-929d-cfd6c40d8343", "node_type": "1", "metadata": {}, "hash": "c005553104bcf5d79baa7a179134855953bf93254bac0f87711c03759e67a717", "class_name": "RelatedNodeInfo"}}, "hash": "d6229cb18ce1091309290603b9ecbe3448a3c79d65976775c7e354e4f2a80e28", "text": "Building Composite Objects\n\nThe reference gallery shows examples of each of the container types in HoloViews. As you work through this guide, it will be useful to look at the description of each type there. \n\nThis guide shows you how to combine the various container types, in order to build data structures that can contain all of the data that you want to visualize or analyze, in an extremely flexible way. For instance, you may have a large set of measurements of different types of data (numerical, image, textual notations, etc.) from different experiments done on different days, with various different parameter values associated with each one. HoloViews can store all of this data together, which will allow you to select just the right bit of data \"on the fly\" for any particular analysis or visualization, by indexing, slicing, selecting, and sampling in this data structure.", "start_char_idx": 2, "end_char_idx": 891, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "87d4ed4a-ada6-48be-929d-cfd6c40d8343": {"__data__": {"id_": "87d4ed4a-ada6-48be-929d-cfd6c40d8343", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "58c28e59-6928-460d-bc4a-02adc56a9b23", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4e15235f9cb6011660067eee8e0169ff8c99fb546ce5f8dddf6a8debf627f253", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "64c81fcf-c1fd-46cd-ad06-0929f59eb5e2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d6229cb18ce1091309290603b9ecbe3448a3c79d65976775c7e354e4f2a80e28", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5784d0e8-4b3d-4bc1-a9d6-acca3b7bbb2d", "node_type": "1", "metadata": {}, "hash": "330dd02a3db51d627911ac5833a960adab085b8b85e74bb90321afa938463c73", "class_name": "RelatedNodeInfo"}}, "hash": "c005553104bcf5d79baa7a179134855953bf93254bac0f87711c03759e67a717", "text": "Nesting hierarchy \n\nTo illustrate the full functionality provided, we will create an example of the maximally nested object structure currently possible with HoloViews:\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nhv.extension('bokeh')\nnp.random.seed(10)\n\ndef sine_curve(phase, freq, amp, power, samples=102):\n xvals = [0.1* i for i in range(samples)]\n return [(x, amp*np.sin(phase+freq*x)**power) for x in xvals]\n\nphases = [0, np.pi/2, np.pi, 3*np.pi/2]\npowers = [1,2,3]\namplitudes = [0.5,0.75, 1.0]\nfrequencies = [0.5, 0.75, 1.0, 1.25, 1.5, 1.75]\n\n\ngridspace = hv.GridSpace(kdims=['Amplitude', 'Power'], group='Parameters', label='Sines')\n\nfor power in powers:\n for amplitude in amplitudes:\n holomap = hv.HoloMap(kdims='Frequency')\n for frequency in frequencies:\n sines = {phase : hv.Curve(sine_curve(phase, frequency, amplitude, power))\n for phase in phases}\n ndoverlay = hv.NdOverlay(sines, kdims='Phase').relabel(group='Phases',\n label='Sines', depth=1)\n overlay = ndoverlay * hv.Points([(i,0) for i in range(0,10)], group='Markers', label='Dots')\n holomap[frequency] = overlay\n gridspace[amplitude, power] = holomap\n\npenguins = hv.RGB.load_image('../reference/elements/assets/penguins.png').relabel(group=\"Family\", label=\"Penguin\")\n\nlayout = gridspace + penguins.opts(axiswise=True)\n```\n\nThis code produces what looks like a relatively simple animation of two side-by-side figures, but is actually a deeply nested data structure:\n\n\n```python\nlayout\n```\n\nTo help us understand this structure, here is a schematic for us to refer to as we unpack this object, level by level:\n\n\n\nEverything that is *displayable* in HoloViews has this same basic hierarchical structure, although any of the levels can be omitted in simpler cases, and many different Element types (not containers) can be substituted for any other. \n\nSince HoloViews 1.3.0, you are allowed to build data-structures that violate this hierarchy (e.g., you can put ``Layout`` objects into ``HoloMaps``) but the resulting object cannot be displayed. Instead, you will be prompted with a message to call the ``collate`` method. Using the ``collate`` method will allow you to generate the appropriate object that correctly obeys the hierarchy shown above, so that it can be displayed.\n\nAs shown in the diagram, there are three different types of container involved:\n\n- Basic Element: elementary HoloViews object containing raw data in an external format like Numpy or pandas.\n- Homogeneous container (UniformNdMapping): collections of Elements or other HoloViews components that are all the same type. These are indexed using array-style key access with values sorted along some dimension(s), e.g. ``[0.50]`` or ``[\"a\",7.6]``.\n- Heterogeneous container (AttrTree): collections of data of different types, e.g. different types of Element. These are accessed by categories using attributes, e.g. ``.Parameters.Sines``, which does not assume any ordering of a dimension.\n\nWe will now go through each of the containers of these different types, at each level.", "start_char_idx": 2, "end_char_idx": 3230, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5784d0e8-4b3d-4bc1-a9d6-acca3b7bbb2d": {"__data__": {"id_": "5784d0e8-4b3d-4bc1-a9d6-acca3b7bbb2d", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fd85052b-e1ab-411e-8555-a16a5604827d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5d957b2ebd383913f542b007661ff275d5fee9cf9ba2e44d3487d7a003d967fd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "87d4ed4a-ada6-48be-929d-cfd6c40d8343", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c005553104bcf5d79baa7a179134855953bf93254bac0f87711c03759e67a717", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b59f914e-c505-47a4-a290-9b6fc4acfc49", "node_type": "1", "metadata": {}, "hash": "fc15485e234451e54de65e8f0296efcc4d7fc195b02b07bf630bdd10afa5492e", "class_name": "RelatedNodeInfo"}}, "hash": "330dd02a3db51d627911ac5833a960adab085b8b85e74bb90321afa938463c73", "text": "``Layout`` Level\n\nAbove, we have already viewed the highest level of our data structure as a Layout. Here is the representation of the entire Layout object, which reflects all the levels shown in the diagram:\n\n\n```python\nprint(layout)\n```\n\nIn the examples below, we will unpack this data structure using attribute access (explained in the Annotating Data user guide) as well as indexing and slicing (explained in the Indexing and Selecting Data user guide).", "start_char_idx": 2, "end_char_idx": 459, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b59f914e-c505-47a4-a290-9b6fc4acfc49": {"__data__": {"id_": "b59f914e-c505-47a4-a290-9b6fc4acfc49", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "93ae6eff-f6a6-415b-a497-72b804e2fdec", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "230e418917a1df7f63cb60acad201a21448f77934616046e04f0fad8b05f4bed", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5784d0e8-4b3d-4bc1-a9d6-acca3b7bbb2d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "330dd02a3db51d627911ac5833a960adab085b8b85e74bb90321afa938463c73", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "814d5b0c-7a84-464c-a847-fb22cf9f8e8d", "node_type": "1", "metadata": {}, "hash": "2b389f0dd779fabc7ae39ad9a0625cd916d7ce5f5b4174a06e6ef340ced9a8e6", "class_name": "RelatedNodeInfo"}}, "hash": "fc15485e234451e54de65e8f0296efcc4d7fc195b02b07bf630bdd10afa5492e", "text": "``GridSpace`` Level\n\nElements within a ``Layout``, such as the ``GridSpace`` in this example, are reached via attribute access:\n\n\n```python\nlayout.Parameters.Sines\n```", "start_char_idx": 2, "end_char_idx": 169, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "814d5b0c-7a84-464c-a847-fb22cf9f8e8d": {"__data__": {"id_": "814d5b0c-7a84-464c-a847-fb22cf9f8e8d", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "13d8a539-0029-4ede-8e47-bfb7ccec4bbb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a9eb8d2d4bed2bbd09e0051871371e41c465d3947006c78167e318b1704e5757", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b59f914e-c505-47a4-a290-9b6fc4acfc49", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fc15485e234451e54de65e8f0296efcc4d7fc195b02b07bf630bdd10afa5492e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3aeeb348-4247-4534-befa-72038d6bcb29", "node_type": "1", "metadata": {}, "hash": "0e239881af2b12ce1f1cffd97e04251f022f91e7f40dd57a99485998ce223f7e", "class_name": "RelatedNodeInfo"}}, "hash": "2b389f0dd779fabc7ae39ad9a0625cd916d7ce5f5b4174a06e6ef340ced9a8e6", "text": "``HoloMap`` Level\n\nThis ``GridSpace`` consists of nine ``HoloMap``s arranged in a two-dimensional space. Let's now select one of these ``HoloMap`` objects by indexing to retrieve the one at [Amplitude,Power] ``[0.5,1.0]``, i.e. the lowest amplitude and power:\n\n\n```python\nlayout.Parameters.Sines[0.5, 1]\n```\n\nAs shown in the schematic above, a ``HoloMap`` contains many elements with associated keys. In this example, these keys are indexed with a dimension ``Frequency``, which is why the ``Frequency`` varies when you play the animation here.", "start_char_idx": 2, "end_char_idx": 547, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3aeeb348-4247-4534-befa-72038d6bcb29": {"__data__": {"id_": "3aeeb348-4247-4534-befa-72038d6bcb29", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3791729d-7890-4ac6-a98b-ca248b038385", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "627fd54b794da74af6537ef7c6a8f17d43e6a00d7b545af2b67ca934148c0765", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "814d5b0c-7a84-464c-a847-fb22cf9f8e8d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2b389f0dd779fabc7ae39ad9a0625cd916d7ce5f5b4174a06e6ef340ced9a8e6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e5a6426c-1f3a-4d2a-a81f-f00866437b28", "node_type": "1", "metadata": {}, "hash": "adfe845c8367775110df23a2e4f718f10500e7cce4e89c362cda51263ab2cb39", "class_name": "RelatedNodeInfo"}}, "hash": "0e239881af2b12ce1f1cffd97e04251f022f91e7f40dd57a99485998ce223f7e", "text": "``Overlay`` Level\n\nThe printed representation showed us that the ``HoloMap`` is composed of ``Overlay`` objects, six in this case (giving six frames to the animation above). Let us access one of these elements, i.e. one frame of the animation above, by indexing to retrieve an ``Overlay`` associated with the key with a ``Frequency`` of *1.0*:\n\n\n```python\nlayout.Parameters.Sines[0.5, 1][1.0]\n```", "start_char_idx": 2, "end_char_idx": 399, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e5a6426c-1f3a-4d2a-a81f-f00866437b28": {"__data__": {"id_": "e5a6426c-1f3a-4d2a-a81f-f00866437b28", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e1458af2-3709-4942-acfc-680ff5e44b6f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e7825275bb61507711a8b520da301abac28c0ca26e8d3d5cce6ff97ac544dab5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3aeeb348-4247-4534-befa-72038d6bcb29", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0e239881af2b12ce1f1cffd97e04251f022f91e7f40dd57a99485998ce223f7e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "88104dac-6a3b-4fc0-9eef-5d510d584237", "node_type": "1", "metadata": {}, "hash": "3fd7a27b131105904fa3e533b352933196e7dd75fc7e6cc7053da8713e96c1eb", "class_name": "RelatedNodeInfo"}}, "hash": "adfe845c8367775110df23a2e4f718f10500e7cce4e89c362cda51263ab2cb39", "text": "NdOverlay Level\n\nAs the representation shows, the ``Overlay`` contains a ``Points`` object and an ``NdOverlay`` object. We can access either one of these using the attribute access supported by ``Overlay``:\n\n\n```python\n(layout.Parameters.Sines[0.5, 1][1].Phases.Sines +\n layout.Parameters.Sines[0.5, 1][1].Markers.Dots)\n```", "start_char_idx": 2, "end_char_idx": 326, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "88104dac-6a3b-4fc0-9eef-5d510d584237": {"__data__": {"id_": "88104dac-6a3b-4fc0-9eef-5d510d584237", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7e0887e8-50d7-46b0-a480-f7426d3863e5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0a637a849d544b64e68a7a8bd0ce70cba017661c8709bc4cf1bc5512188f1200", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e5a6426c-1f3a-4d2a-a81f-f00866437b28", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "adfe845c8367775110df23a2e4f718f10500e7cce4e89c362cda51263ab2cb39", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0c4a2342-479f-46b4-bde4-56bcb149b48c", "node_type": "1", "metadata": {}, "hash": "9644e624c95cd8ca18c6835fc792a4823a044e36a10dfae4ee149252a9494963", "class_name": "RelatedNodeInfo"}}, "hash": "3fd7a27b131105904fa3e533b352933196e7dd75fc7e6cc7053da8713e96c1eb", "text": "``Curve`` Level\n\nThe ``NdOverlay`` is so named because it is an overlay of items indexed by dimensions, unlike the regular attribute-access overlay types. In this case it is indexed by ``Phase``, with four values. If we index to select one of these values, we will get an individual ``Curve``, e.g. the one with zero phase:\n\n\n```python\nl=layout.Parameters.Sines[0.5, 1][1].Phases.Sines[0.0]\nl\n```\n\n\n```python\nprint(l)\n```", "start_char_idx": 2, "end_char_idx": 425, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0c4a2342-479f-46b4-bde4-56bcb149b48c": {"__data__": {"id_": "0c4a2342-479f-46b4-bde4-56bcb149b48c", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f1263a5e-890a-4100-8f67-b12c3efccc51", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8889149c404f1e91dc4ee6a7c406db1553929253cc98d59532e0f79b2ffab1b3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "88104dac-6a3b-4fc0-9eef-5d510d584237", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3fd7a27b131105904fa3e533b352933196e7dd75fc7e6cc7053da8713e96c1eb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "95a39dd7-9d13-4c39-ada8-2c9610b4261e", "node_type": "1", "metadata": {}, "hash": "bdc4ff162d94834d3f26cee58e3581712a37c3894321729397cfbe624786224b", "class_name": "RelatedNodeInfo"}}, "hash": "9644e624c95cd8ca18c6835fc792a4823a044e36a10dfae4ee149252a9494963", "text": "Data Level\n\nAt this point, we have reached the end of the HoloViews objects; below this object is only the raw data stored in one of the supported formats (e.g. NumPy arrays or Pandas DataFrames):\n\n\n```python\ntype(layout.Parameters.Sines[0.5, 1][1].Phases.Sines[0.0].data)\n```\n\nActually, HoloViews will let you go even further down, accessing data inside the Numpy array using the continuous (floating-point) coordinate systems declared in HoloViews. E.g. here we can ask for a single datapoint, such as the value at x=5.2:\n\n\n```python\nlayout.Parameters.Sines[0.5, 1][1].Phases.Sines[0.0][5.2]\n```\n\nIndexing into 1D Elements like Curve and higher-dimensional but regularly gridded Elements like Image, Surface, and HeatMap will return the nearest defined value (i.e., the results \"snap\" to the nearest data item):\n\n\n```python\nlayout.Parameters.Sines[0.5, 1][1].Phases.Sines[0.0][5.23], layout.Parameters.Sines[0.5, 1][1].Phases.Sines[0.0][5.27]\n```\n\nFor other Element types, such as Points, snapping is not supported and thus indexing down into the .data array will be less useful, because it will only succeed for a perfect floating-point match on the key dimensions. In those cases, you can still use all of the access methods provided by the numpy array itself, via ``.data``, e.g. ``.data52]``, but note that such native operations force you to use the native indexing scheme of the array, i.e. integer access starting at zero, not the more convenient and semantically meaningful [continuous coordinate systems we provide through HoloViews.", "start_char_idx": 2, "end_char_idx": 1547, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "95a39dd7-9d13-4c39-ada8-2c9610b4261e": {"__data__": {"id_": "95a39dd7-9d13-4c39-ada8-2c9610b4261e", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5e63e422-c989-4f07-8f3c-b148be20ed40", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c0b39932827b31507a94ccb2ddc16995dff0d73ab8575ce59de0076ca9d0bedb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0c4a2342-479f-46b4-bde4-56bcb149b48c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9644e624c95cd8ca18c6835fc792a4823a044e36a10dfae4ee149252a9494963", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9d17076c-a831-4e87-8be2-ac8b3805a38a", "node_type": "1", "metadata": {}, "hash": "2e980af8cb01b2b192f9728e2048f3ff49254568816db8afbee8dc89a24726d1", "class_name": "RelatedNodeInfo"}}, "hash": "bdc4ff162d94834d3f26cee58e3581712a37c3894321729397cfbe624786224b", "text": "Indexing using ``.select``\n\nThe curve displayed immediately above shows the final, deepest Element access possible in HoloViews for this object:\n\n```python\nlayout.Parameters.Sines[0.5, 1][1].Phases.Sines[0.0]\n```\nThis is the curve with an amplitude of *0.5*, raised to a power of *1.0* with frequency of *1.0* and *0* phase. These are all the numbers, in order, used in the access shown above.\n\nThe ``.select`` method is a more explicit way to use key access, with both of these equivalent to each other:\n\n\n```python\no1 = layout.Parameters.Sines.select(Amplitude=0.5, Power=1.0).select(Frequency=1.0)\no2 = layout.Parameters.Sines.select(Amplitude=0.5, Power=1.0, Frequency=1.0)\no1 + o2\n```\n\nThe second form demonstrates HoloViews' **deep indexing** feature, which allows indices to cross nested container boundaries. The above is as far as we can index before reaching a heterogeneous type (the ``Overlay``), where we need to use attribute access. Here is the more explicit method of indexing down to a curve, using ``.select`` to specify dimensions by name instead of bracket-based indexing by position:\n\n\n```python\nlayout.Parameters.Sines.select(Amplitude=0.5,Power=1.0, Frequency=1.0, Phase=0.0).Phases.Sines\n```", "start_char_idx": 2, "end_char_idx": 1217, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9d17076c-a831-4e87-8be2-ac8b3805a38a": {"__data__": {"id_": "9d17076c-a831-4e87-8be2-ac8b3805a38a", "embedding": null, "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "29303cba-da57-46fa-ba55-e1623b30caad", "node_type": "4", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "aa238a5072eac5ca048afa656a09ed1aa8a80695624173937a1ca0faaf510538", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "95a39dd7-9d13-4c39-ada8-2c9610b4261e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bdc4ff162d94834d3f26cee58e3581712a37c3894321729397cfbe624786224b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "52a814d4-9169-4c47-9666-3d79e48b48a5", "node_type": "1", "metadata": {}, "hash": "e608fa82b71c3959ee31703d0d5e07dabc61d2e514401b695acf5925b33a5a0d", "class_name": "RelatedNodeInfo"}}, "hash": "2e980af8cb01b2b192f9728e2048f3ff49254568816db8afbee8dc89a24726d1", "text": "Summary\n\nAs you can see, HoloViews lets you compose objects of heterogeneous types, and objects covering many different numerical or other dimensions, laying them out spatially, temporally, or overlaid. The resulting data structures are complex, but they are composed of simple elements with well-defined interactions, making it feasible to express nearly any relationship that will characterize your data. In practice, you will probably not need this many levels, but given this complete example, you should be able to construct an appropriate hierarchy for whatever type of data that you want to represent or visualize. \n\nAs emphasized above, it is not recommended to combine these objects in other orderings. Of course, any ``Element`` can be substituted for any other, which doesn't change the structure. But you should not e.g. display an ``Overlay`` of ``Layout`` objects. The display system will generally attempt to figure out the correct arrangement and warn you to call the `.collate` method to reorganize the objects in the recommended format.\n\nAnother important thing to observe is that ``Layout`` and ``Overlay`` types may not be nested, e.g. using the ``+`` operator on two `Layout` objects will not create a nested `Layout` instead combining the contents of the two objects. The same applies to the ``*`` operator and combining of `Overlay` objects.", "start_char_idx": 2, "end_char_idx": 1369, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "52a814d4-9169-4c47-9666-3d79e48b48a5": {"__data__": {"id_": "52a814d4-9169-4c47-9666-3d79e48b48a5", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bb55b7f4-789b-46b6-8856-fb7370234033", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "43ed9fca863f159395382e1c8df5c815fd5f5eb52c01c21a6a3ba8aeba5c3134", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9d17076c-a831-4e87-8be2-ac8b3805a38a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2e980af8cb01b2b192f9728e2048f3ff49254568816db8afbee8dc89a24726d1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "77b1262e-7840-4e1e-8ea7-e1c8b7e9aea0", "node_type": "1", "metadata": {}, "hash": "26d9d89bee58175256aa0f8b0671273314b1ca2313a07b511b7b74d9455e44b2", "class_name": "RelatedNodeInfo"}}, "hash": "e608fa82b71c3959ee31703d0d5e07dabc61d2e514401b695acf5925b33a5a0d", "text": "Live Data\n\nThe HoloMap is a core HoloViews data structure that allows easy exploration of parameter spaces. The essence of a HoloMap is that it contains a collection of Elements (e.g. ``Image``s and ``Curve``s) that you can easily select and visualize.\n\nHoloMaps hold fully constructed Elements at specifically sampled points in a multidimensional space. Although HoloMaps are useful for exploring high-dimensional parameter spaces, they can very quickly consume huge amounts of memory to store all these Elements. For instance, a hundred samples along four orthogonal dimensions would need a HoloMap containing a hundred *million* Elements, each of which could be a substantial object that takes time to create and costs memory to store. Thus ``HoloMaps`` have some clear limitations:\n\n* HoloMaps may require the generation of millions of Elements before the first element can be viewed.\n* HoloMaps can easily exhaust all the memory available to Python.\n* HoloMaps can even more easily exhaust all the memory in the browser when displayed.\n* Static export of a notebook containing HoloMaps can result in impractically large HTML files.\n\nThe ``DynamicMap`` addresses these issues by computing and displaying elements dynamically, allowing exploration of much larger datasets:\n\n* DynamicMaps generate elements on the fly, allowing the process of exploration to begin immediately.\n* DynamicMaps do not require fixed sampling, allowing exploration of parameters with arbitrary resolution.\n* DynamicMaps are lazy in the sense they only compute as much data as the user wishes to explore.\n\nOf course, these advantages come with some limitations:\n\n* DynamicMaps require a live notebook server and cannot be fully exported to static HTML.\n* DynamicMaps store only a portion of the underlying data, in the form of an Element cache and their output is dependent on the particular version of the executed code. \n* DynamicMaps (and particularly their element caches) are typically stateful (with values that depend on patterns of user interaction), which can make them more difficult to reason about.\n\nIn addition to the different computational requirements of ``DynamicMaps``, they can be used to build sophisticated, interactive visualisations that cannot be achieved using only ``HoloMaps``. This notebook demonstrates some basic examples and the Responding to Events guide follows on by introducing the streams system. The Custom Interactivity shows how you can directly interact with your plots when using the Bokeh backend.\n\nWhen DynamicMap was introduced in version 1.6, it supported multiple different 'modes' which have now been deprecated. This notebook demonstrates the simpler, more flexible and more powerful DynamicMap introduced in version 1.7. Users who have been using the previous version of DynamicMap should be unaffected as backwards compatibility has been preserved for the most common cases.\n\nAll this will make much more sense once we've tried out some ``DynamicMaps`` and showed how they work, so let's create one!\n\n\nTo use visualize and use a DynamicMap you need to be running a live Jupyter server.When viewing this user guide as part of the documentation DynamicMaps will be sampled with a limited number of states.\nIt's also best to run this notebook one cell at a time, not via \"Run All\", so that subsequent cells can reflect your dynamic interaction with widgets in previous cells.", "start_char_idx": 2, "end_char_idx": 3405, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "77b1262e-7840-4e1e-8ea7-e1c8b7e9aea0": {"__data__": {"id_": "77b1262e-7840-4e1e-8ea7-e1c8b7e9aea0", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7fe21dc9-e6d5-4e99-859c-c1905abb7a79", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6143028ddfab7ca065da997c8d1222285bac5609f1af11780da9c4bf4e9efd8d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "52a814d4-9169-4c47-9666-3d79e48b48a5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e608fa82b71c3959ee31703d0d5e07dabc61d2e514401b695acf5925b33a5a0d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "38093699-77f7-47b6-93a6-6f6c9ac4544f", "node_type": "1", "metadata": {}, "hash": "9c13ec025c853755c56d0c4887261de049c5c4fd4dcb43f8b88bcd08b829e5ed", "class_name": "RelatedNodeInfo"}}, "hash": "26d9d89bee58175256aa0f8b0671273314b1ca2313a07b511b7b74d9455e44b2", "text": "``DynamicMap`` \n\nLet's start by importing HoloViews and loading the extension:\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('matplotlib')\n```\n\nWe will now create ``DynamicMap`` similar to the ``HoloMap`` introduced in the Introductory guide. The ``HoloMap`` in that introduction consisted of ``Image`` elements defined by a function returning NumPy arrays called ``sine_array``. Here we will define a ``waves_image`` function that returns an array pattern parameterized by arbitrary ``alpha`` and ``beta`` parameters inside a HoloViews \n``Image`` element:\n\n\n```python\nxvals = np.linspace(-4, 0, 202)\nyvals = np.linspace(4, 0, 202)\nxs, ys = np.meshgrid(xvals, yvals)\n\ndef waves_image(alpha, beta):\n return hv.Image(np.sin(((ys/alpha)**alpha+beta)*xs))\n\nwaves_image(1,0) + waves_image(1,4)\n```\n\nNow we can demonstrate the possibilities for exploration enabled by the simplest declaration of a ``DynamicMap``.", "start_char_idx": 2, "end_char_idx": 989, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "38093699-77f7-47b6-93a6-6f6c9ac4544f": {"__data__": {"id_": "38093699-77f7-47b6-93a6-6f6c9ac4544f", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0b2c6fb9-d4cb-4bbc-a903-350bdd7045c0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "15f7fb85c8ce8448849d4fcdedae32078859f49f4cf27326be0f561f7e73fe90", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "77b1262e-7840-4e1e-8ea7-e1c8b7e9aea0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "26d9d89bee58175256aa0f8b0671273314b1ca2313a07b511b7b74d9455e44b2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "12e1d014-d786-4c82-a345-f9db135e7967", "node_type": "1", "metadata": {}, "hash": "2b2459d0ec340b663dd8647b9b05fc123d4d74c00baab2a6cdd4672c82375469", "class_name": "RelatedNodeInfo"}}, "hash": "9c13ec025c853755c56d0c4887261de049c5c4fd4dcb43f8b88bcd08b829e5ed", "text": "Basic ``DynamicMap`` declaration\n\nA simple ``DynamicMap`` declaration looks identical to that needed to declare a ``HoloMap``. Instead of supplying some initial data, we will supply the ``waves_image`` function with key dimensions simply declaring the arguments of that function:\n\n\n```python\ndmap = hv.DynamicMap(waves_image, kdims=['alpha', 'beta'])\ndmap\n```\n\nThis object is created instantly, but because it doesn't generate any `hv.Image` objects initially it only shows the printed representation of this object along with some information about how to display it. We will refer to a ``DynamicMap`` that doesn't have enough information to display itself as 'unbounded'.\n\nThe textual representation of all ``DynamicMaps`` look similar, differing only in the listed dimensions until they have been evaluated at least once.", "start_char_idx": 2, "end_char_idx": 855, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "12e1d014-d786-4c82-a345-f9db135e7967": {"__data__": {"id_": "12e1d014-d786-4c82-a345-f9db135e7967", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "70b130f6-dc82-49fb-907b-341935bf5c2e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b224eae70a9fcd5ce0f77ce15bb18ae98502e214feda7ea80902668958983396", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "38093699-77f7-47b6-93a6-6f6c9ac4544f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9c13ec025c853755c56d0c4887261de049c5c4fd4dcb43f8b88bcd08b829e5ed", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "386b6e92-448d-4ceb-8990-86201dc75b9d", "node_type": "1", "metadata": {}, "hash": "e5f9fe423d6beb0b50f7bba37e3280d1f5c16576b5a74d3bcfeeceb0ed492c6f", "class_name": "RelatedNodeInfo"}}, "hash": "2b2459d0ec340b663dd8647b9b05fc123d4d74c00baab2a6cdd4672c82375469", "text": "Explicit indexing\n\nUnlike a corresponding ``HoloMap`` declaration, this simple unbounded ``DynamicMap`` cannot yet visualize itself. To view it, we can follow the advice in the warning message. First we will explicitly index into our ``DynamicMap`` in the same way you would access a key on a ``HoloMap``:\n\n\n```python\ndmap[1,2] + dmap.select(alpha=1, beta=2)\n```\n\nNote that the declared kdims are specifying the arguments *by position* as they do not match the argument names of the ``waves_image`` function. If you *do* match the argument names *exactly*, you can map a kdim position to any argument position of the callable. For instance, the declaration ``kdims=['freq', 'phase']`` would index first by frequency, then phase without mixing up the arguments to ``waves_image`` when indexing.", "start_char_idx": 2, "end_char_idx": 795, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "386b6e92-448d-4ceb-8990-86201dc75b9d": {"__data__": {"id_": "386b6e92-448d-4ceb-8990-86201dc75b9d", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "914a7db0-a0e1-483c-88ee-8a7aee656d0e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9867902f8e8825e5f818d8ee0929d947edccd7fbd390563abdab6de307d1bd52", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "12e1d014-d786-4c82-a345-f9db135e7967", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2b2459d0ec340b663dd8647b9b05fc123d4d74c00baab2a6cdd4672c82375469", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6c3d2a5a-dd55-4fc8-b98e-e08598c20ca5", "node_type": "1", "metadata": {}, "hash": "86d20d81f5fd9a8266672bf3809c9753390b5376881c159efd99b53442c85916", "class_name": "RelatedNodeInfo"}}, "hash": "e5f9fe423d6beb0b50f7bba37e3280d1f5c16576b5a74d3bcfeeceb0ed492c6f", "text": "Setting dimension ranges\n\nThe second suggestion in the warning message was to supply dimension ranges using the ``redim.range`` method:\n\n\n```python\ndmap.redim.range(alpha=(1, 5.0), beta=(1, 6.0))\n```\n\nHere each `hv.Image` object visualizing a particular sine ring pattern with the given parameters is created dynamically, whenever the slider is set to a new value. Any value in the allowable range can be requested by dragging the sliders or by tweaking the values using the left and right arrow keys.\n\nOf course, we didn't have to use the ``redim.range`` method and we could have simply declared the ranges right away using explicit ``hv.Dimension`` objects. This would allow us to declare other dimension properties such as the step size used by the sliders: by default each slider can select around a thousand distinct values along its range but you can specify your own step value via the dimension ``step`` parameter. If you use integers in your range declarations, integer stepping will be assumed with a step size of one.\n\nNote that whenever the ``redim`` method is used, a new ``DynamicMap`` is returned with the updated dimensions. In other words, the original ``dmap`` remains unbounded with default dimension objects.", "start_char_idx": 2, "end_char_idx": 1231, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6c3d2a5a-dd55-4fc8-b98e-e08598c20ca5": {"__data__": {"id_": "6c3d2a5a-dd55-4fc8-b98e-e08598c20ca5", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bfa5ef2a-379d-4bec-a437-e9ac29646a80", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "300292174d3f582986ef799a450b236973076e0eef4f2a3560d159c15d39a596", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "386b6e92-448d-4ceb-8990-86201dc75b9d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e5f9fe423d6beb0b50f7bba37e3280d1f5c16576b5a74d3bcfeeceb0ed492c6f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0f1b6160-9703-4898-a3ef-176b80dbb896", "node_type": "1", "metadata": {}, "hash": "9be6934b0af1a31af8a8ed5c9a80cfa5a4d40961ba177562b3fff657f15ed220", "class_name": "RelatedNodeInfo"}}, "hash": "86d20d81f5fd9a8266672bf3809c9753390b5376881c159efd99b53442c85916", "text": "Setting dimension values\n\nThe ``DynamicMap`` above allows exploration of *any* phase and frequency within the declared range unlike an equivalent ``HoloMap`` which would have to be composed of a finite set of samples. We can achieve a similar discrete sampling using ``DynamicMap`` by setting the ``values`` parameter on the dimensions:\n\n\n```python\ndmap.redim.values(alpha=[1, 2, 3], beta=[0.1, 1.0, 2.5])\n```\n\nThe sliders now snap to the specified dimension values and if you are running this live, the above cell should look like a HoloMap. ``DynamicMap`` is in fact a subclass of ``HoloMap`` with some crucial differences:\n\n* You can now pick as many values of **alpha** or **beta** as allowed by the slider.\n* What you see in the cell above will not be exported in any HTML snapshot of the notebook", "start_char_idx": 2, "end_char_idx": 804, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0f1b6160-9703-4898-a3ef-176b80dbb896": {"__data__": {"id_": "0f1b6160-9703-4898-a3ef-176b80dbb896", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6edca6c1-87cb-4ee2-a4a8-bda516e35ce1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e81d2711f7d4ff0240413cb1b618ac848d46ea749ac1b07596616f1562d0cf9a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6c3d2a5a-dd55-4fc8-b98e-e08598c20ca5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "86d20d81f5fd9a8266672bf3809c9753390b5376881c159efd99b53442c85916", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2fb83456-8df8-4882-9bd4-08245e5e5d5b", "node_type": "1", "metadata": {}, "hash": "ffa0229fcd08589fc9ad763ae8c33bedf2fa9f29a6c172b68a552e4ffc17bcc8", "class_name": "RelatedNodeInfo"}}, "hash": "9be6934b0af1a31af8a8ed5c9a80cfa5a4d40961ba177562b3fff657f15ed220", "text": "Getting the current key\n\nThe ``current_key`` property returns the current key of the ``DynamicMap``, i.e. either a value (one-dimensional) or a tuple (multi-dimensional) that represents the current state of the widgets. If you move the sliders above and re-execute the cell below you will see that the tuple returned reflects the values of *alpha* and *beta*.\n\n\n```python\ndmap.current_key\n```\n\nWe will now explore how ``DynamicMaps`` relate to ``HoloMaps`` including conversion operations between the two types. As we will see, there are other ways to display a ``DynamicMap`` without using explicit indexing or redim.", "start_char_idx": 2, "end_char_idx": 620, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2fb83456-8df8-4882-9bd4-08245e5e5d5b": {"__data__": {"id_": "2fb83456-8df8-4882-9bd4-08245e5e5d5b", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "12f33b98-2bfe-4e5e-b123-ea8272746dcc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "21f22ba8fd3f24e2a10786c4243fb3f3b6e6ef239cfe8567b661ce3d441190a8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0f1b6160-9703-4898-a3ef-176b80dbb896", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9be6934b0af1a31af8a8ed5c9a80cfa5a4d40961ba177562b3fff657f15ed220", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9b40ba06-31ee-41e8-9c3c-b67daf68a00d", "node_type": "1", "metadata": {}, "hash": "772854cb24025e11f18fa7fedfb68adddc999116a7d6751f6027a7c1c9e1222b", "class_name": "RelatedNodeInfo"}}, "hash": "ffa0229fcd08589fc9ad763ae8c33bedf2fa9f29a6c172b68a552e4ffc17bcc8", "text": "Interaction with ``HoloMap``s\n\nTo explore the relationship between ``DynamicMap`` and ``HoloMap``, let's declare another callable to draw some shapes we will use in a new ``DynamicMap``:\n\n\n```python\ndef shapes(N, radius=0.5): # Positional keyword arguments are fine\n paths = [hv.Path([[(radius*np.sin(a), radius*np.cos(a)) \n for a in np.linspace(-np.pi, np.pi, n+2)]], \n extents=(-1,-1,1,1)) \n for n in range(N,N+3)]\n return hv.Overlay(paths)\n```", "start_char_idx": 2, "end_char_idx": 509, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9b40ba06-31ee-41e8-9c3c-b67daf68a00d": {"__data__": {"id_": "9b40ba06-31ee-41e8-9c3c-b67daf68a00d", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bd08e15d-804f-465f-b4cd-806dca9b2bca", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c5b6bf8b34dec7f66b24e715590c2147cd5f2b9ad47553ae9326391b013c057a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2fb83456-8df8-4882-9bd4-08245e5e5d5b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ffa0229fcd08589fc9ad763ae8c33bedf2fa9f29a6c172b68a552e4ffc17bcc8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "75616307-f5e1-44c5-bf6c-6318704c06f6", "node_type": "1", "metadata": {}, "hash": "ad4cad6e738894300cd20ae6c72af0875574b3a53953a4e0f0e46d3085c4b5b3", "class_name": "RelatedNodeInfo"}}, "hash": "772854cb24025e11f18fa7fedfb68adddc999116a7d6751f6027a7c1c9e1222b", "text": "Sampling ``DynamicMap`` from a ``HoloMap``\n\nWhen combining a ``HoloMap`` with a ``DynamicMap``, it would be very awkward to have to match the declared dimension ``values`` of the DynamicMap with the keys of the ``HoloMap``. Fortunately you don't have to:\n\n\n```python\nholomap = hv.HoloMap({(N,r):shapes(N, r) for N in [3,4,5] for r in [0.5,0.75]}, kdims=['N', 'radius'])\ndmap = hv.DynamicMap(shapes, kdims=['N','radius'])\nholomap + dmap\n```\n\nHere we declared a ``DynamicMap`` without using ``redim``, but we can view its output because it is presented alongside a ``HoloMap`` which defines the available keys. This convenience is subject to three particular restrictions:\n\n\n* You cannot display a layout consisting of unbounded ``DynamicMaps`` only, because at least one HoloMap is needed to define the samples.\n* The HoloMaps provide the necessary information required to sample the DynamicMap. \n\nNote that there is one way ``DynamicMap`` is less restricted than ``HoloMap``: you can freely combine bounded ``DynamicMaps`` together in a ``Layout``, even if they don't share key dimensions.", "start_char_idx": 2, "end_char_idx": 1093, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "75616307-f5e1-44c5-bf6c-6318704c06f6": {"__data__": {"id_": "75616307-f5e1-44c5-bf6c-6318704c06f6", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8d830914-60ef-47f3-aa87-0b7d1b029025", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "52b00c1b17fb2adf007acc6591f5cea0cb778789fc2bf76257e14d306123ff80", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9b40ba06-31ee-41e8-9c3c-b67daf68a00d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "772854cb24025e11f18fa7fedfb68adddc999116a7d6751f6027a7c1c9e1222b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "49ea73da-303c-4ce3-ac38-18b3cccb66e1", "node_type": "1", "metadata": {}, "hash": "d55fac7330b9a1babf0143542922026471a6626e861881861cf1b50339537935", "class_name": "RelatedNodeInfo"}}, "hash": "ad4cad6e738894300cd20ae6c72af0875574b3a53953a4e0f0e46d3085c4b5b3", "text": "Converting from ``DynamicMap`` to ``HoloMap``\n\nAbove we mentioned that ``DynamicMap`` is an instance of ``HoloMap``. Does this mean it has a ``.data`` attribute?\n\n\n```python\ndtype = type(dmap.data).__name__\nlength = len(dmap.data)\nprint(\"DynamicMap 'dmap' has an {dtype} .data attribute of length {length}\".format(dtype=dtype, length=length))\n```\n\nThis is exactly the same sort of ``.data`` as the equivalent ``HoloMap``, except that its values will vary according to how much you explored the parameter space of ``dmap`` using the sliders above. In a ``HoloMap``, ``.data`` contains a defined sampling along the different dimensions, whereas in a ``DynamicMap``, the ``.data`` is simply the *cache*.\n\nThe cache serves two purposes:\n\n* Avoids recomputation of an element should we revisit a particular point in the parameter space. This works well for categorical or integer dimensions, but doesn't help much when using continuous sliders for real-valued dimensions.\n* Records the space that has been explored with the ``DynamicMap`` for any later conversion to a ``HoloMap`` up to the allowed cache size.\n\nWe can always convert *any* ``DynamicMap`` directly to a ``HoloMap`` as follows:\n\n\n```python\nhv.HoloMap(dmap)\n```\n\nThis is in fact equivalent to declaring a HoloMap with the same parameters (dimensions, etc.) using ``dmap.data`` as input, but is more convenient. Note that the slider positions reflect those we sampled from the ``HoloMap`` in the previous section.\n\nAlthough creating a HoloMap this way is easy, the result is poorly controlled, as the keys in the DynamicMap cache are usually defined by how you moved the sliders around. If you instead want to specify a specific set of samples, you can easily do so by using the same key-selection semantics as for a ``HoloMap`` to define exactly which elements are to be sampled and put into the cache:\n\n\n```python\nhv.HoloMap(dmap[{(2,0.3), (2,0.6), (3,0.3), (3,0.6)}])\n```\n\nHere we index the ``dmap`` with specified keys to return a *new* DynamicMap with those keys in its cache, which we then cast to a ``HoloMap``. This allows us to export specific contents of ``DynamicMap`` to static HTML which will display the data at the sampled slider positions.\n\nThe key selection above happens to define a Cartesian product, which is one of the most common ways to sample across dimensions. Because the list of such dimension values can quickly get very large when enumerated as above, we provide a way to specify a Cartesian product directly, which also works with ``HoloMaps``. Here is an equivalent way of defining the same set of four points in that two-dimensional space:\n\n\n```python\nsamples = hv.HoloMap(dmap[{2,3},{0.5,1.0}])\nsamples\n```\n\n\n```python\nsamples.data.keys()\n```\n\nThe default cache size of 500 Elements is relatively high so that interactive exploration will work smoothly, but you can reduce it using the ``cache_size`` parameter if you find you are running into issues with memory consumption. A bounded ``DynamicMap`` with ``cache_size=1`` requires the least memory, but will recompute a new Element every time the sliders are moved, making it less responsive.", "start_char_idx": 2, "end_char_idx": 3137, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "49ea73da-303c-4ce3-ac38-18b3cccb66e1": {"__data__": {"id_": "49ea73da-303c-4ce3-ac38-18b3cccb66e1", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "060a2418-dad9-4b37-8279-d324b4ba6f80", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cc20d992bbcef53c9c54600229c18f9bbdda73d4d8805ec70368ace8b2ca458a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "75616307-f5e1-44c5-bf6c-6318704c06f6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ad4cad6e738894300cd20ae6c72af0875574b3a53953a4e0f0e46d3085c4b5b3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6ca37e5e-cb64-4751-b2da-e66e6f5f7630", "node_type": "1", "metadata": {}, "hash": "2e432072722a2eb9a12d26232abad234388246025bae66000ffc77d385a14d33", "class_name": "RelatedNodeInfo"}}, "hash": "d55fac7330b9a1babf0143542922026471a6626e861881861cf1b50339537935", "text": "Converting from ``HoloMap`` to ``DynamicMap``\n\nWe have now seen how to convert from a ``DynamicMap`` to a ``HoloMap`` for the purposes of static export, but why would you ever want to do the inverse?\n\nAlthough having a ``HoloMap`` to start with means it will not save you memory, converting to a ``DynamicMap`` does mean that the rendering process can be deferred until a new slider value requests an update. You can achieve this conversion using the ``Dynamic`` utility as demonstrated here by applying it to the previously defined ``HoloMap`` called ``samples``:\n\n\n```python\nfrom holoviews.util import Dynamic\ndynamic = Dynamic(samples)\nprint('After apply Dynamic, the type is a {dtype}'.format(dtype=type(dynamic).__name__))\ndynamic\n```\n\nIn this particular example, there is no real need to use ``Dynamic`` as each frame renders quickly enough. For visualizations that are slow to render, using ``Dynamic`` can result in more responsive visualizations. \n\nThe ``Dynamic`` utility is very versatile and is discussed in more detail in the Transforming Elements guide.", "start_char_idx": 2, "end_char_idx": 1069, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6ca37e5e-cb64-4751-b2da-e66e6f5f7630": {"__data__": {"id_": "6ca37e5e-cb64-4751-b2da-e66e6f5f7630", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7682e8a6-c8d1-406c-a8b4-36dc53f39d58", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0ec45159abedcdaa119a0d5dc5bfa6d5b11ad02f7afa3f7043b4c433cbb700e0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "49ea73da-303c-4ce3-ac38-18b3cccb66e1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d55fac7330b9a1babf0143542922026471a6626e861881861cf1b50339537935", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "df76fd31-5a31-4f9a-8930-88861233d3cc", "node_type": "1", "metadata": {}, "hash": "900409d75c5c0e4f59559b079667126b05e702a90055377b7102646148a9c8e8", "class_name": "RelatedNodeInfo"}}, "hash": "2e432072722a2eb9a12d26232abad234388246025bae66000ffc77d385a14d33", "text": "Slicing ``DynamicMaps``\n\nAs we have seen we can either declare dimension ranges directly in the kdims or use the ``redim.range`` convenience method:\n\n\n```python\ndmap = hv.DynamicMap(shapes, kdims=['N','radius']).redim.range(N=(2,20), radius=(0.5,1.0))\n```\n\nThe declared dimension ranges define the absolute limits allowed for exploration in this continuous, bounded DynamicMap . That said, you can use the soft_range parameter to view subregions within that range. Setting the soft_range parameter on dimensions can be done conveniently using slicing:\n\n\n```python\nsliced = dmap[4:8, :]\nsliced\n```\n\n\nNotice that N is now restricted to the range 4:8. Open slices are used to release any ``soft_range`` values, which resets the limits back to those defined by the full range:\n\n\n```python\nsliced[:, 0.8:1.0]\n```\n\nThe ``[:]`` slice leaves the soft_range values alone and can be used as a convenient way to clone a ``DynamicMap``. Note that mixing slices with any other object type is not supported. In other words, once you use a single slice, you can only use slices in that indexing operation.", "start_char_idx": 2, "end_char_idx": 1093, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "df76fd31-5a31-4f9a-8930-88861233d3cc": {"__data__": {"id_": "df76fd31-5a31-4f9a-8930-88861233d3cc", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0930e77b-9427-473d-8819-466323f57143", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1f7299fd097e383b20f060c4328ace352c8b83bca3e7da85dbe66102167870a6", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6ca37e5e-cb64-4751-b2da-e66e6f5f7630", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2e432072722a2eb9a12d26232abad234388246025bae66000ffc77d385a14d33", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0d2f5075-2c3b-4dd7-b6d9-19beae5669ff", "node_type": "1", "metadata": {}, "hash": "519e67923c862ecb3f9d0ec96972c07f7a210e35a87ebae2a3edc8d584696f24", "class_name": "RelatedNodeInfo"}}, "hash": "900409d75c5c0e4f59559b079667126b05e702a90055377b7102646148a9c8e8", "text": "Using groupby to discretize a DynamicMap\n\nA DynamicMap also makes it easy to partially or completely discretize a function to evaluate in a complex plot. By grouping over specific dimensions that define a fixed sampling via the Dimension values parameter, the DynamicMap can be viewed as a ``GridSpace``, ``NdLayout``, or ``NdOverlay``. If a dimension specifies only a continuous range it can't be grouped over, but it may still be explored using the widgets. This means we can plot partial or completely discretized views of a parameter space easily.", "start_char_idx": 2, "end_char_idx": 553, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0d2f5075-2c3b-4dd7-b6d9-19beae5669ff": {"__data__": {"id_": "0d2f5075-2c3b-4dd7-b6d9-19beae5669ff", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a2ecfa92-cf7b-4721-bfe3-06c19ebdec14", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2650253a36f110b5c8e74c82e60106ba1fe95c67152be6f7ce944bfc964dcb25", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "df76fd31-5a31-4f9a-8930-88861233d3cc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "900409d75c5c0e4f59559b079667126b05e702a90055377b7102646148a9c8e8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e1e22611-7d27-4b21-bb9a-36e11943f60a", "node_type": "1", "metadata": {}, "hash": "ce0ba975929587a022e2711ef46f7ff326e1c9ff1bd8933d1a118f120a4758b1", "class_name": "RelatedNodeInfo"}}, "hash": "519e67923c862ecb3f9d0ec96972c07f7a210e35a87ebae2a3edc8d584696f24", "text": "Partially discretize\n\nThe implementation for all the groupby operations uses the ``.groupby`` method internally, but we also provide three higher-level convenience methods to group dimensions into an ``NdOverlay`` (``.overlay``), ``GridSpace`` (``.grid``), or ``NdLayout`` (``.layout``).\n\nHere we will evaluate a simple sine function with three dimensions, the phase, frequency, and amplitude. We assign the frequency and amplitude discrete samples, while defining a continuous range for the phase:\n\n\n```python\nxs = np.linspace(0, 2*np.pi,100)\n\ndef sin(ph, f, amp):\n return hv.Curve((xs, np.sin(xs*f+ph)*amp))\n\nkdims=[hv.Dimension('phase', range=(0, np.pi)),\n hv.Dimension('frequency', values=[0.1, 1, 2, 5, 10]),\n hv.Dimension('amplitude', values=[0.5, 5, 10])]\n\nwaves_dmap = hv.DynamicMap(sin, kdims=kdims)\n```\n\nNext we define the amplitude dimension to be overlaid and the frequency dimension to be gridded:\n\n\n```python\nwave_grid = waves_dmap.overlay('amplitude').grid('frequency')\nwave_grid.opts(fig_size=200, show_legend=True)\n```\n\nAs you can see, instead of having three sliders (one per dimension), we've now laid out the frequency dimension as a discrete set of values in a grid, and the amplitude dimension as a discrete set of values in an overlay, leaving one slider for the remaining dimension (phase). This approach can help you visualize a large, multi-dimensional space efficiently, with full control over how each dimension is made visible.", "start_char_idx": 2, "end_char_idx": 1474, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e1e22611-7d27-4b21-bb9a-36e11943f60a": {"__data__": {"id_": "e1e22611-7d27-4b21-bb9a-36e11943f60a", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5312dda3-3869-4e2a-9abd-2131b816d2cd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "41baf6c768a325199e1c36be78ec0ab46b70a946557c5f69d2f67cadc0c724b6", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0d2f5075-2c3b-4dd7-b6d9-19beae5669ff", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "519e67923c862ecb3f9d0ec96972c07f7a210e35a87ebae2a3edc8d584696f24", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dd8249e6-c0d9-435b-80eb-af3c2bd28408", "node_type": "1", "metadata": {}, "hash": "05d119a54e5e34750e0528f265dceb184b9e0c2d01e5f60fe4ea4b1e8611ea6b", "class_name": "RelatedNodeInfo"}}, "hash": "ce0ba975929587a022e2711ef46f7ff326e1c9ff1bd8933d1a118f120a4758b1", "text": "Fully discretize\n\nGiven a continuous function defined over a space, we could sample it manually, but here we'll look at an example of evaluating it using the groupby method. Let's look at a spiral function with a frequency and first- and second-order phase terms. Then we define the dimension values for all the parameters and declare the DynamicMap:\n\n\n```python\nopts.defaults(opts.Path(color=hv.Palette('Blues')))\n\ndef spiral_equation(f, ph, ph2):\n r = np.arange(0, 1, 0.005)\n xs, ys = (r * fn(f*np.pi*np.sin(r+ph)+ph2) for fn in (np.cos, np.sin))\n return hv.Path((xs, ys))\n\nspiral_dmap = hv.DynamicMap(spiral_equation, kdims=['f','ph','ph2'])\nspiral_dmap = spiral_dmap.redim.values(\n f=np.linspace(1, 10, 10),\n ph=np.linspace(0, np.pi, 10),\n ph2=np.linspace(0, np.pi, 4))\n```\n\nNow we can make use of the ``.groupby`` method to group over the frequency and phase dimensions, which we will display as part of a GridSpace by setting the ``container_type``. This leaves the second phase variable, which we assign to an NdOverlay by setting the ``group_type``:\n\n\n```python\nspiral_grid = spiral_dmap.groupby(['f', 'ph'], group_type=hv.NdOverlay, container_type=hv.GridSpace)\nspiral_grid.opts(\n opts.GridSpace(xaxis=None, yaxis=None),\n opts.Path(bgcolor='white', xaxis=None, yaxis=None))\n```\n\nThis grid shows a range of frequencies `f` on the x axis, a range of the first phase variable `ph` on the `y` axis, and a range of different `ph2` phases as overlays within each location in the grid. As you can see, these techniques can help you visualize multidimensional parameter spaces compactly and conveniently.", "start_char_idx": 2, "end_char_idx": 1632, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dd8249e6-c0d9-435b-80eb-af3c2bd28408": {"__data__": {"id_": "dd8249e6-c0d9-435b-80eb-af3c2bd28408", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7a3bb692-f7e7-467d-a9ad-fe42d98cd712", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c108910b06f2187091bd0a28e6a8da1ec435c2b1490650d04bfa298677cc2d26", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e1e22611-7d27-4b21-bb9a-36e11943f60a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ce0ba975929587a022e2711ef46f7ff326e1c9ff1bd8933d1a118f120a4758b1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f96e1603-61d3-421a-953f-d582611bdc89", "node_type": "1", "metadata": {}, "hash": "8afc00a29ed2d44d4329d7a5bb1ae98f5e65895c96c6c8ee0759e9192fa0e1a1", "class_name": "RelatedNodeInfo"}}, "hash": "05d119a54e5e34750e0528f265dceb184b9e0c2d01e5f60fe4ea4b1e8611ea6b", "text": "DynamicMaps and normalization\n\nBy default, a ``HoloMap`` normalizes the display of elements using the minimum and maximum values found across the ``HoloMap``. This automatic behavior is not possible in a ``DynamicMap``, where arbitrary new elements are being generated on the fly. Consider the following examples where the arrays contained within the returned ``Image`` objects are scaled with time:\n\n\n```python\nls = np.linspace(0, 10, 200)\nxx, yy = np.meshgrid(ls, ls)\n\ndef cells(time):\n return hv.Image(time*np.sin(xx+time)*np.cos(yy+time), vdims='Intensity')\n\ndmap = hv.DynamicMap(cells, kdims='time').redim.range(time=(1,20))\n(dmap + dmap.redim.range(Intensity=(0,10))).opts(\n opts.Image(axiswise=True))\n```\n\nHere we use ``axiswise=True`` to see the behavior of the two cases independently. We see in **A** that when only the time dimension is given a range, no automatic normalization occurs (unlike a ``HoloMap``). In **B** we see that normalization is applied, but only when the value dimension ('Intensity') range has been specified. \n\nIn other words, ``DynamicMaps`` cannot support automatic normalization across their elements, but do support the same explicit normalization behavior as ``HoloMaps``. Values that are generated outside this range are simply clipped in accord with the usual semantics of explicit value dimension ranges. \n\nNote that we always have the option of casting a ``DynamicMap`` to a ``HoloMap`` in order to automatically normalize across the cached values, without needing explicit value dimension ranges.", "start_char_idx": 2, "end_char_idx": 1547, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f96e1603-61d3-421a-953f-d582611bdc89": {"__data__": {"id_": "f96e1603-61d3-421a-953f-d582611bdc89", "embedding": null, "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fc8e90b6-06f4-4047-b6bd-9ab4705bd244", "node_type": "4", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f7c6c13187627c4a4c7b00280691da407b863bc7c32e07e45b4f307f16431790", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dd8249e6-c0d9-435b-80eb-af3c2bd28408", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "05d119a54e5e34750e0528f265dceb184b9e0c2d01e5f60fe4ea4b1e8611ea6b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e38787cd-ee60-453c-bb38-12a77dd1708e", "node_type": "1", "metadata": {}, "hash": "eaaa8c20ae8a4289613150f0cca3397eb2f9e8ab6c5dd9926e6c71d296170dd3", "class_name": "RelatedNodeInfo"}}, "hash": "8afc00a29ed2d44d4329d7a5bb1ae98f5e65895c96c6c8ee0759e9192fa0e1a1", "text": "Using DynamicMaps in your code\n\nAs you can see, ``DynamicMaps`` let you use HoloViews with a very wide range of dynamic data formats and sources, making it simple to visualize ongoing processes or very large data spaces. \n\nGiven unlimited computational resources, the functionality covered in this guide would match that offered by ``HoloMap`` but with fewer normalization options. ``DynamicMap`` actually enables a vast range of new possibilities for dynamic, interactive visualizations as covered in the Responding to Events guide. Following on from that, the Custom Interactivity guide shows how you can directly interact with your plots when using the Bokeh backend.", "start_char_idx": 2, "end_char_idx": 672, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e38787cd-ee60-453c-bb38-12a77dd1708e": {"__data__": {"id_": "e38787cd-ee60-453c-bb38-12a77dd1708e", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9f90f7f1-0d8b-4088-91dc-3e68ccff5622", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "20a18fb4ff2487b5a3dc9ff6f596ca637217fb18010a9f517d6eaab907b6be39", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f96e1603-61d3-421a-953f-d582611bdc89", "node_type": "1", "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8afc00a29ed2d44d4329d7a5bb1ae98f5e65895c96c6c8ee0759e9192fa0e1a1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b1ec5408-445b-4a27-9b70-4bf29bf0eada", "node_type": "1", "metadata": {}, "hash": "07b524934905201b72c7b3dd444493d1e79759627bd92bf7a657951ed4994e93", "class_name": "RelatedNodeInfo"}}, "hash": "eaaa8c20ae8a4289613150f0cca3397eb2f9e8ab6c5dd9926e6c71d296170dd3", "text": "Tabular Datasets\n\nIn this guide we will explore how to work with tabular data in HoloViews. Tabular data has a fixed list of column headings, with values stored in an arbitrarily long list of rows. Spreadsheets, relational databases, CSV files, and many other typical data sources fit naturally into this format. HoloViews defines an extensible system of interfaces to load, manipulate, and visualize this kind of data, as well as allowing conversion of any of the non-tabular data types into tabular data for analysis or data interchange.\n\nBy default HoloViews will use one of these data storage formats for tabular data:\n\n* A pure Python dictionary containing 1D NumPy-arrays for each column.\n\n ``{'x': np.array([0, 1, 2]), 'y': np.array([0, 1, 2])}``\n\n* A purely NumPy array format for numeric data.\n\n ``np.array([[0, 0], [1, 1], [2, 3]])``\n\n* Pandas DataFrames\n\n ``pd.DataFrame(np.array([[0, 0], [1, 1], [2, 3]]), columns=['x', 'y'])``\n\n* Dask DataFrames\n\n* cuDF Dataframes\n\nA number of additional standard constructors are supported:\n\n* A tuple of array (or array-like) objects\n\n ``([0, 1, 2], [0, 1, 2])``\n\n* A list of tuples:\n\n ``[(0, 0), (1, 1), (2, 2)]``\n\n\n\n```python\nimport numpy as np\nimport pandas as pd\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('bokeh', 'matplotlib')\n\nopts.defaults(opts.Scatter(size=10))\n```", "start_char_idx": 2, "end_char_idx": 1363, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b1ec5408-445b-4a27-9b70-4bf29bf0eada": {"__data__": {"id_": "b1ec5408-445b-4a27-9b70-4bf29bf0eada", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6e482ac6-d8c9-47b3-95ca-e886b8d498b5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "08df0f69dfa8bd9033e48ff1c0251763ce7029fa3b17d8e07a117447111daf35", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e38787cd-ee60-453c-bb38-12a77dd1708e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "eaaa8c20ae8a4289613150f0cca3397eb2f9e8ab6c5dd9926e6c71d296170dd3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d6c2e551-3f70-4782-8e20-c4d5af38969e", "node_type": "1", "metadata": {}, "hash": "2a3dfd7719dfd807a98b2347c7fd559e1a4880e2e160f4024a086a1fff5ed8e7", "class_name": "RelatedNodeInfo"}}, "hash": "07b524934905201b72c7b3dd444493d1e79759627bd92bf7a657951ed4994e93", "text": "A simple Dataset\n\nUsually when working with data we have one or more independent variables, taking the form of categories, labels, discrete sample coordinates, or bins. We refer to these independent variables as key dimensions (or ``kdims`` for short) in HoloViews. The observer or dependent variables, on the other hand, are referred to as value dimensions (``vdims``), and are ordinarily measured or calculated given the independent variables. The simplest useful form of a ``Dataset`` object is therefore a column 'x' and a column 'y' corresponding to the key dimensions and value dimensions respectively. An obvious visual representation of this data is a ``Table``:\n\n\n```python\nxs = np.linspace(0, 10, 11)\nys = np.sin(xs)\n\ntable = hv.Table((xs, ys), 'x', 'y')\ntable\n```\n\nHowever, this data has many more meaningful visual representations, and therefore the first important concept is that ``Dataset`` objects can be converted to other objects as long as their dimensionality allows it, meaning that you can easily create the different objects from the same data (and cast between the objects once created):\n\n\n```python\n(hv.Scatter(table) + hv.Curve(table) + hv.Area(table) + hv.Bars(table)).cols(2)\n```\n\nEach of these three plots uses the same data, but represents a different assumption about the semantic meaning of that data -- the ``Scatter`` plot is appropriate if that data consists of independent samples, the ``Curve`` plot is appropriate for samples chosen from an underlying smooth function, and the ``Bars`` plot is appropriate for independent categories of data. Since all these plots have the same dimensionality, they can easily be converted to each other, but there is normally only one of these representations that is semantically appropriate for the underlying data. For this particular data, the semantically appropriate choice is ``Curve``, since the *y* values are samples from the continuous function ``exp``.\n\nAs a guide to which Elements can be converted to each other, those of the same dimensionality here should be interchangeable, because of the underlying similarity of their columnar representation:\n\n* 0D: BoxWhisker, Spikes, Distribution\n* 1D: Area, Bars, BoxWhisker, Curve, ErrorBars, Scatter, Spread\n* 2D: Bars, Bivariate, BoxWhisker, HeatMap, Points, VectorField \n* 3D: Scatter3D, TriSurface, VectorField\n\nThis categorization is based only on the ``kdims``, which define the space in which the data has been sampled or defined. An Element can also have any number of value dimensions (``vdims``), which may be mapped onto various attributes of a plot such as the color, size, and orientation of the plotted items. For a reference of how to use these various Element types, see the Elements Reference.", "start_char_idx": 2, "end_char_idx": 2746, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d6c2e551-3f70-4782-8e20-c4d5af38969e": {"__data__": {"id_": "d6c2e551-3f70-4782-8e20-c4d5af38969e", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0f77421b-efd3-42e8-a96e-1d9e30ff74d8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fb2d70ebb59e1132f7364c08b19e703f9a14c7aed1bcae259c2cdd300057048d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b1ec5408-445b-4a27-9b70-4bf29bf0eada", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "07b524934905201b72c7b3dd444493d1e79759627bd92bf7a657951ed4994e93", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1f2e9b1f-5001-4eef-b383-bdf2ef454fc0", "node_type": "1", "metadata": {}, "hash": "640bb049b768fa778bdc48b1be33bf9bbd5c93dcdaf75bb6d9c1ec4c56a76903", "class_name": "RelatedNodeInfo"}}, "hash": "2a3dfd7719dfd807a98b2347c7fd559e1a4880e2e160f4024a086a1fff5ed8e7", "text": "Data types and Constructors\n\nAs discussed above, ``Dataset`` provides an extensible interface to store and operate on data in different formats. All interfaces support a number of standard constructors.", "start_char_idx": 2, "end_char_idx": 204, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1f2e9b1f-5001-4eef-b383-bdf2ef454fc0": {"__data__": {"id_": "1f2e9b1f-5001-4eef-b383-bdf2ef454fc0", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2900fc6b-6ddb-4643-8923-87144ed6eedb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cd2c07a6e06420458ba7e94d0faa86213e95e30cc01a68936c4935488eb01a3c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d6c2e551-3f70-4782-8e20-c4d5af38969e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2a3dfd7719dfd807a98b2347c7fd559e1a4880e2e160f4024a086a1fff5ed8e7", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1b9abdd3-f6b6-40de-817d-f52c67f42126", "node_type": "1", "metadata": {}, "hash": "e2fae7fcfec40a9a598f97bc8da4e1deb644b9b2b2d416434dfdcf589fb22f2c", "class_name": "RelatedNodeInfo"}}, "hash": "640bb049b768fa778bdc48b1be33bf9bbd5c93dcdaf75bb6d9c1ec4c56a76903", "text": "Storage formats\n\nDataset types can be constructed using one of three supported formats, (a) a dictionary of columns, (b) an NxD array with N rows and D columns, or (c) pandas dataframes:\n\n\n```python\nprint(hv.Scatter({'x': xs, 'y': ys}) +\n hv.Scatter(np.column_stack([xs, ys])) +\n hv.Scatter(pd.DataFrame({'x': xs, 'y': ys})))\n```", "start_char_idx": 2, "end_char_idx": 341, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1b9abdd3-f6b6-40de-817d-f52c67f42126": {"__data__": {"id_": "1b9abdd3-f6b6-40de-817d-f52c67f42126", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "889efd32-d2be-4293-b2a4-06af2505e9ba", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b45a4680ec1d1bee92a5054feac84b9cfc7cbbfc44767ed05a0e056519b9cfcf", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1f2e9b1f-5001-4eef-b383-bdf2ef454fc0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "640bb049b768fa778bdc48b1be33bf9bbd5c93dcdaf75bb6d9c1ec4c56a76903", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6932aead-354c-4715-b023-fca91d4a6a63", "node_type": "1", "metadata": {}, "hash": "d7b71fd7424e07fe051847d3bfee4cd4df4fccb5629f03e460c47138285b9aad", "class_name": "RelatedNodeInfo"}}, "hash": "e2fae7fcfec40a9a598f97bc8da4e1deb644b9b2b2d416434dfdcf589fb22f2c", "text": "Literals\n\nIn addition to the main storage formats, Dataset Elements support construction from three Python literal formats: (a) An iterator of y-values, (b) a tuple of columns, and (c) an iterator of row tuples.\n\n\n```python\nprint(hv.Scatter(ys) + hv.Scatter((xs, ys)) + hv.Scatter(zip(xs, ys)))\n```\n\nFor these inputs, the data will need to be copied to a new data structure, having one of the three storage formats above. By default Dataset will try to construct a simple array, falling back to either pandas dataframes (if available) or the dictionary-based format if the data is not purely numeric. Additionally, the interfaces will try to maintain the provided data's type, so numpy arrays and pandas DataFrames will always be parsed first by their respective array and dataframe interfaces.\n\n\n```python\ndf = pd.DataFrame({'x': xs, 'y': ys, 'z': ys*2})\nprint(type(hv.Scatter(df).data))\n```\n\nDataset will attempt to parse the supplied data, falling back to each consecutive interface if the previous could not interpret the data. The default list of fallbacks and simultaneously the list of allowed datatypes is:\n\n\n```python\nhv.Dataset.datatype\n```\n\nNote these include grid based datatypes, which are covered in Gridded Datasets. To select a particular storage format explicitly, supply one or more allowed datatypes (note that the 'array' interface only supports data with matching types):\n\n\n```python\nprint(type(hv.Scatter((xs.astype('float64'), ys), datatype=['array']).data))\nprint(type(hv.Scatter((xs, ys), datatype=['dictionary']).data))\nprint(type(hv.Scatter((xs, ys), datatype=['dataframe']).data))\n```", "start_char_idx": 2, "end_char_idx": 1615, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6932aead-354c-4715-b023-fca91d4a6a63": {"__data__": {"id_": "6932aead-354c-4715-b023-fca91d4a6a63", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e2f650f3-0d70-4bb4-9c46-0d04e642c7db", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "de04efaaf461c7f61cc0a65c5adbcc75ad1c504c78cee5b46b9da85245d4dc90", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1b9abdd3-f6b6-40de-817d-f52c67f42126", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e2fae7fcfec40a9a598f97bc8da4e1deb644b9b2b2d416434dfdcf589fb22f2c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "31dd5e40-5902-4866-aafa-77c22717005b", "node_type": "1", "metadata": {}, "hash": "5dce9cd272e08af0a8bb3c94ae6449df9bed47a4274ef4888db2bdcb8cd0f9f4", "class_name": "RelatedNodeInfo"}}, "hash": "d7b71fd7424e07fe051847d3bfee4cd4df4fccb5629f03e460c47138285b9aad", "text": "Sharing Data\n\nSince the formats with labelled columns do not require any specific order, each Element can effectively become a view into a single set of data. By specifying different key and value dimensions, many Elements can show different values, while sharing the same underlying data source.\n\n\n```python\noverlay = hv.Scatter(df, 'x', 'y') * hv.Scatter(df, 'x', 'z')\noverlay\n```\n\nWe can quickly confirm that the data is actually shared:\n\n\n```python\noverlay.Scatter.I.data is overlay.Scatter.II.data\n```\n\nFor columnar data, this approach is much more efficient than creating copies of the data for each Element, and allows for some advanced features like linked brushing in the Bokeh backend.", "start_char_idx": 2, "end_char_idx": 697, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "31dd5e40-5902-4866-aafa-77c22717005b": {"__data__": {"id_": "31dd5e40-5902-4866-aafa-77c22717005b", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "626679c0-eb2c-4389-9387-ad10078f3d95", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1b255831dd226145d012f932476fd06671fc76d87b6b341b6bc18f1bc12908de", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6932aead-354c-4715-b023-fca91d4a6a63", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d7b71fd7424e07fe051847d3bfee4cd4df4fccb5629f03e460c47138285b9aad", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e9cea5b8-8cb2-434c-b701-2ce2c792aabd", "node_type": "1", "metadata": {}, "hash": "b4bbd25c696d9f3757b27543ca71b99074cc1a1c002c0378b6c10140c6ef9842", "class_name": "RelatedNodeInfo"}}, "hash": "5dce9cd272e08af0a8bb3c94ae6449df9bed47a4274ef4888db2bdcb8cd0f9f4", "text": "Converting to raw data\n\nColumn types make it easy to export the data to the three basic formats: arrays, dataframes, and a dictionary of columns.", "start_char_idx": 2, "end_char_idx": 147, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e9cea5b8-8cb2-434c-b701-2ce2c792aabd": {"__data__": {"id_": "e9cea5b8-8cb2-434c-b701-2ce2c792aabd", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2aad0690-5a03-449e-ab48-daac4e42bb5a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "00028bec93322bbaf5e5ae0bc62abbdc1581322e846b94fe889dd30333b4f30d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "31dd5e40-5902-4866-aafa-77c22717005b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5dce9cd272e08af0a8bb3c94ae6449df9bed47a4274ef4888db2bdcb8cd0f9f4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c615f9ad-ca69-4382-927c-b270bd16db79", "node_type": "1", "metadata": {}, "hash": "f4161f3f16c58fd024ed5e861bda72c8c50140deeab0fe1a6f872513a769560e", "class_name": "RelatedNodeInfo"}}, "hash": "b4bbd25c696d9f3757b27543ca71b99074cc1a1c002c0378b6c10140c6ef9842", "text": "Array\n\n\n```python\ntable.array()\n```", "start_char_idx": 2, "end_char_idx": 37, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c615f9ad-ca69-4382-927c-b270bd16db79": {"__data__": {"id_": "c615f9ad-ca69-4382-927c-b270bd16db79", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0953a5cc-560b-47d8-8337-53a63204b61a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "926db032b8852a9d1c8478ae1f68cd648270c99e2b9bc102f130a4e9f9989419", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e9cea5b8-8cb2-434c-b701-2ce2c792aabd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b4bbd25c696d9f3757b27543ca71b99074cc1a1c002c0378b6c10140c6ef9842", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a795711d-5e67-4789-82b3-509baf35182a", "node_type": "1", "metadata": {}, "hash": "796ad08476269cb8d30c7bc2dbda7373190998b02d32c337f89fa843993a3b44", "class_name": "RelatedNodeInfo"}}, "hash": "f4161f3f16c58fd024ed5e861bda72c8c50140deeab0fe1a6f872513a769560e", "text": "Pandas DataFrame\n\n\n```python\ntable.dframe().head()\n```", "start_char_idx": 2, "end_char_idx": 56, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a795711d-5e67-4789-82b3-509baf35182a": {"__data__": {"id_": "a795711d-5e67-4789-82b3-509baf35182a", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6840f554-4171-4595-aaa5-60664e1a4ceb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9201e01eee4557073dfb467ce5bf7e2afc4240648da88844a768ad38a2f94412", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c615f9ad-ca69-4382-927c-b270bd16db79", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f4161f3f16c58fd024ed5e861bda72c8c50140deeab0fe1a6f872513a769560e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a83ae3cf-4869-476e-880e-c0e44ce6286d", "node_type": "1", "metadata": {}, "hash": "6ac7a2ca86f8ef04ca5c3fa1d5df239b3519a9ac3e4a38041862c17bdb3c3e1e", "class_name": "RelatedNodeInfo"}}, "hash": "796ad08476269cb8d30c7bc2dbda7373190998b02d32c337f89fa843993a3b44", "text": "Dataset dictionary\n\n\n```python\ntable.columns()\n```", "start_char_idx": 2, "end_char_idx": 52, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a83ae3cf-4869-476e-880e-c0e44ce6286d": {"__data__": {"id_": "a83ae3cf-4869-476e-880e-c0e44ce6286d", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "71cd0a7d-ca07-4319-b19a-c4d931ef207a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4f2ef00acc9c011c50a2fab636bfa349c2d72a0e876a7739462e6773d8b212c0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a795711d-5e67-4789-82b3-509baf35182a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "796ad08476269cb8d30c7bc2dbda7373190998b02d32c337f89fa843993a3b44", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8437c0b5-9eeb-4603-b1c0-061256085eb1", "node_type": "1", "metadata": {}, "hash": "b9fb1b136c3cf12522286df6defe8e56946e593f185b7297b7ed71aaa5c8e7fe", "class_name": "RelatedNodeInfo"}}, "hash": "6ac7a2ca86f8ef04ca5c3fa1d5df239b3519a9ac3e4a38041862c17bdb3c3e1e", "text": "Creating tabular data from Elements using the .table and .dframe methods\n\nIf you have data in some other HoloViews element and would like to use the columnar data features, you can easily tabularize any of the core Element types into a ``Table`` Element. Similarly, the ``.dframe()`` method will convert an Element into a pandas DataFrame. These methods are very useful if you want to then transform the data into a different Element type, or to perform different types of analysis.", "start_char_idx": 2, "end_char_idx": 485, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8437c0b5-9eeb-4603-b1c0-061256085eb1": {"__data__": {"id_": "8437c0b5-9eeb-4603-b1c0-061256085eb1", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ea69e197-a5a4-4971-968d-62371a4565f3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "22d315522ae774d7648b6d231d99ba2a92507d4d908a8d9112cd86f730fabe51", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a83ae3cf-4869-476e-880e-c0e44ce6286d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6ac7a2ca86f8ef04ca5c3fa1d5df239b3519a9ac3e4a38041862c17bdb3c3e1e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9e171ae4-fe23-4431-871f-1997cb5317dc", "node_type": "1", "metadata": {}, "hash": "032a7ffd1cc4a25b00736c2ca1692c85d47c041eb7054acd730f66a70031a581", "class_name": "RelatedNodeInfo"}}, "hash": "b9fb1b136c3cf12522286df6defe8e56946e593f185b7297b7ed71aaa5c8e7fe", "text": "Tabularizing simple Elements\n\nFor a simple example, we can create a ``Curve`` of an exponential function and cast it to a ``Table``, with the same result as creating the Table directly from the data as done earlier in this user guide:\n\n\n```python\nxs = np.arange(10)\ncurve = hv.Curve(zip(xs, np.sin(xs)))\ncurve * hv.Scatter(curve) + hv.Table(curve)\n```\n\nSimilarly, we can get a pandas dataframe of the Curve using ``curve.dframe()``:\n\n\n```python\ncurve.dframe()\n```", "start_char_idx": 2, "end_char_idx": 465, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9e171ae4-fe23-4431-871f-1997cb5317dc": {"__data__": {"id_": "9e171ae4-fe23-4431-871f-1997cb5317dc", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f865eb54-6f87-446f-96d4-3c4259ac8d79", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "35d89cea711ccca36b0565d2307c3fc9a8f98d9462d5aa5a8da47af4ef7145dd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8437c0b5-9eeb-4603-b1c0-061256085eb1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b9fb1b136c3cf12522286df6defe8e56946e593f185b7297b7ed71aaa5c8e7fe", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dd4c1df9-5029-421e-8ff6-21b9699c21b2", "node_type": "1", "metadata": {}, "hash": "f4909106d968efb49e1036f347a983f50035eb7b1fc7332541af3ed2c882bc7e", "class_name": "RelatedNodeInfo"}}, "hash": "032a7ffd1cc4a25b00736c2ca1692c85d47c041eb7054acd730f66a70031a581", "text": "Collapsing dimensioned containers\n\nEven deeply nested objects can be deconstructed in this way, serializing them to make it easier to get your raw data out of a collection of specialized ``Element`` types. Let's say we want to make multiple observations of a noisy signal. We can collect the data into a ``HoloMap`` to visualize it and then call ``.collapse()`` to get a ``Dataset`` object to which we can apply operations or transformations to other ``Element`` types. Deconstructing nested data in this way only works if the data is homogeneous. In practical terms this requires that your data structure contains Elements (of any type) held in these Container types: ``NdLayout``, ``GridSpace``, ``HoloMap``, and ``NdOverlay``, with all dimensions consistent throughout (so that they can all fit into the same set of columns). To read more about these containers see the Dimensioned Containers guide.\n\nLet's now go back to the ``Image`` example. We will collect a number of observations of some noisy data into a ``HoloMap`` and display it:\n\n\n```python\nobs_hmap = hv.HoloMap({i: hv.Image(np.random.randn(10, 10), bounds=(0,0,3,3))\n for i in range(3)}, kdims='Observation')\nobs_hmap\n```\n\nNow we can serialize this data just as before, where this time we get a four-column (4D) table. The key dimensions of both the HoloMap and the Images, as well as the z-values of each ``Image``, are all merged into a single table. We can visualize the samples we have collected by converting it to a ``Scatter3D`` object.\n\n\n```python\nhv.output(backend='matplotlib', size=150)\n\ncollapsed = obs_hmap.collapse()\nscatter_layout = collapsed.to.scatter3d() + hv.Table(collapsed)\nscatter_layout.opts(\n opts.Scatter3D(color='z', cmap='hot', edgecolor='black', s=50))\n```\n\nHere the `z` dimension is shown by color, as in the original images, and the other three dimensions determine where the datapoint is shown in 3D. This way of deconstructing objects will work for any data structure that satisfies the conditions described above, no matter how nested. If we vary the amount of noise while continuing to performing multiple observations, we can create an ``NdLayout`` of HoloMaps, one for each noise level, and animated by the observation number.\n\n\n```python\nextents = (0, 0, 3, 3)\n\nerror_hmap = hv.HoloMap({\n (i, j): hv.Image(j*np.random.randn(3, 3), bounds=extents)\n for i in range(3) for j in np.linspace(0, 1, 3)},\n ['Observation', 'noise'])\n\nnoise_layout = error_hmap.layout('noise')\nnoise_layout\n```\n\nAnd again, we can easily convert the object to a ``Table``:\n\n\n```python\nhv.Table(noise_layout.collapse())\n```", "start_char_idx": 2, "end_char_idx": 2634, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dd4c1df9-5029-421e-8ff6-21b9699c21b2": {"__data__": {"id_": "dd4c1df9-5029-421e-8ff6-21b9699c21b2", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "31e2ad1a-3ced-4fbc-913b-49bcb7e1a405", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ab313f65decd4507972b7bf13ec5bdbfcdf2a2902fcbd9807b53bbf486acbe11", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9e171ae4-fe23-4431-871f-1997cb5317dc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "032a7ffd1cc4a25b00736c2ca1692c85d47c041eb7054acd730f66a70031a581", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fc72eb5d-d4c7-4134-9379-b3fd5d4e45aa", "node_type": "1", "metadata": {}, "hash": "95453461bd10c7532157781c54e2db75890d2a2594029017a3cf2784e5638420", "class_name": "RelatedNodeInfo"}}, "hash": "f4909106d968efb49e1036f347a983f50035eb7b1fc7332541af3ed2c882bc7e", "text": "Applying operations to the data", "start_char_idx": 2, "end_char_idx": 33, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fc72eb5d-d4c7-4134-9379-b3fd5d4e45aa": {"__data__": {"id_": "fc72eb5d-d4c7-4134-9379-b3fd5d4e45aa", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "faed368e-b4ef-470f-b89a-9049079c05e8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a720a87e013c3c73f25600a930c2d1173e1b7051a2d5b6acb63acf14b4e67312", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dd4c1df9-5029-421e-8ff6-21b9699c21b2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f4909106d968efb49e1036f347a983f50035eb7b1fc7332541af3ed2c882bc7e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "633c6a57-9679-4ab7-b7af-a5abbff997f4", "node_type": "1", "metadata": {}, "hash": "2e4852551d6eb7c43dd2692c5bc4d3cb7478410757993181c170d060ee3ef06a", "class_name": "RelatedNodeInfo"}}, "hash": "95453461bd10c7532157781c54e2db75890d2a2594029017a3cf2784e5638420", "text": "Sorting by columns\n\nOnce data is in columnar form, it is simple to apply a variety of operations. For instance, Dataset can be sorted by their dimensions using the ``.sort()`` method. By default, this method will sort by the key dimensions in an ascending order, but any other dimension(s) can be sorted by providing them as an argument list to the sort method. The ``reverse`` argument also allows sorting in descending order:\n\n\n```python\nhv.output(backend='bokeh')\n\nbars = hv.Bars((['C', 'A', 'B', 'D'], [2, 7, 3, 4]))\n(bars +\n bars.sort().relabel('sorted') +\n bars.sort(['y']).relabel('y-sorted') +\n bars.sort(reverse=True).relabel('reverse sorted')\n).opts(shared_axes=False).cols(2)\n```", "start_char_idx": 2, "end_char_idx": 694, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "633c6a57-9679-4ab7-b7af-a5abbff997f4": {"__data__": {"id_": "633c6a57-9679-4ab7-b7af-a5abbff997f4", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6aac926c-ad7d-4f01-9b34-3ab974199883", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2cbb63b636ab9617a3f9dd7bcf3881915088a0932c04e6b3975b3fed10f3e764", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fc72eb5d-d4c7-4134-9379-b3fd5d4e45aa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "95453461bd10c7532157781c54e2db75890d2a2594029017a3cf2784e5638420", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f24f683e-66c4-40c1-9416-e284bd8a4b75", "node_type": "1", "metadata": {}, "hash": "7f71913bbaf7950c2d88fd37550afa1e5cca0f40ca686ceb8b4cb39deb819a62", "class_name": "RelatedNodeInfo"}}, "hash": "2e4852551d6eb7c43dd2692c5bc4d3cb7478410757993181c170d060ee3ef06a", "text": "Working with categorical or grouped data\n\nData is often grouped in various ways, and the Dataset interface provides various means to easily compare between groups and apply statistical aggregates. We'll start by generating some synthetic data with two groups along the x axis and 4 groups along the y axis.\n\n\n```python\nn = np.arange(1000)\nxs = np.repeat(range(2), 500)\nys = n%4\nzs = np.random.randn(1000)\ntable = hv.Table((xs, ys, zs), ['x', 'y'], 'z')\ntable\n```\n\nSince there are repeat observations of the same x- and y-values, we may want to reduce the data before we display it or else use a datatype that supports plotting distributions in this way. The ``BoxWhisker`` type allows doing exactly that:\n\n\n```python\nhv.BoxWhisker(table)\n```", "start_char_idx": 2, "end_char_idx": 743, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f24f683e-66c4-40c1-9416-e284bd8a4b75": {"__data__": {"id_": "f24f683e-66c4-40c1-9416-e284bd8a4b75", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9935cfd7-d3ca-4c1e-9943-52bbb1599070", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "74197778c68c619252e1980f21e847e1f6fb77f2e71f9d4960200179a9e73297", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "633c6a57-9679-4ab7-b7af-a5abbff997f4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2e4852551d6eb7c43dd2692c5bc4d3cb7478410757993181c170d060ee3ef06a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "913cb1fe-36dd-44c3-acaa-b6d4dda3d07a", "node_type": "1", "metadata": {}, "hash": "d023caf61a4ac616d7943a9d2ac4b1ab4e09f7797061819969416777e2e677d6", "class_name": "RelatedNodeInfo"}}, "hash": "7f71913bbaf7950c2d88fd37550afa1e5cca0f40ca686ceb8b4cb39deb819a62", "text": "Aggregating/Reducing dimensions\n\nMost types require the data to be non-duplicated before being displayed. For this purpose, HoloViews makes it easy to ``aggregate`` and ``reduce`` the data. These two operations are simple complements of each other--aggregate computes a statistic for each group in the supplied dimensions, while reduce combines all the groups except the supplied dimensions. Supplying only a function and no dimensions will simply aggregate or reduce all available key dimensions.\n\n\n```python\nhv.Bars(table).aggregate('x', function=np.mean) + hv.Bars(table).reduce(x=np.mean)\n```\n\n(**A**) aggregates over both the x and y dimension, computing the mean for each x/y group, while (**B**) reduces the x dimension leaving just the mean for each group along y.", "start_char_idx": 2, "end_char_idx": 775, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "913cb1fe-36dd-44c3-acaa-b6d4dda3d07a": {"__data__": {"id_": "913cb1fe-36dd-44c3-acaa-b6d4dda3d07a", "embedding": null, "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "626860fd-a698-4a2d-87ed-da47d6821f2c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1b88a3a61f00e8ec35e0fe3a7665db96eb765ff119459a17e9d515e2377e9ad5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f24f683e-66c4-40c1-9416-e284bd8a4b75", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7f71913bbaf7950c2d88fd37550afa1e5cca0f40ca686ceb8b4cb39deb819a62", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fbf0b662-c1d1-4b07-b8d4-a9f6a075779e", "node_type": "1", "metadata": {}, "hash": "c5136fff856b86713872c3584fc0c788949062b6d7e1c7597e48fc22ed4a70f4", "class_name": "RelatedNodeInfo"}}, "hash": "d023caf61a4ac616d7943a9d2ac4b1ab4e09f7797061819969416777e2e677d6", "text": "Collapsing multiple Dataset Elements\n\nWhen multiple observations are broken out into a ``HoloMap`` they can easily be combined using the ``collapse`` method. Here we create a number of Curves with increasingly larger y-values. By collapsing them with a ``function`` and a ``spreadfn`` we can compute the mean curve with a confidence interval. We then simply cast the collapsed ``Curve`` to a ``Spread`` and ``Curve`` Element to visualize them.\n\n\n```python\nhmap = hv.HoloMap({i: hv.Curve(np.arange(10)*i) for i in range(10)})\ncollapsed = hmap.collapse(function=np.mean, spreadfn=np.std)\nhv.Spread(collapsed) * hv.Curve(collapsed) + hv.Table(collapsed)\n```", "start_char_idx": 2, "end_char_idx": 656, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fbf0b662-c1d1-4b07-b8d4-a9f6a075779e": {"__data__": {"id_": "fbf0b662-c1d1-4b07-b8d4-a9f6a075779e", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "39b1b238-a91c-47e9-9c35-769c3b189c16", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "54f3de3acefc4145018663a9092ceed07db921646c817aa3788edbed13ce997c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "913cb1fe-36dd-44c3-acaa-b6d4dda3d07a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d023caf61a4ac616d7943a9d2ac4b1ab4e09f7797061819969416777e2e677d6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1f9dc12d-fa44-49af-9b99-5cf57f47c924", "node_type": "1", "metadata": {}, "hash": "58dffdf66342d04c9c934dfd0bdc213572ca2f7ae4028dc69f029c6ff5334a69", "class_name": "RelatedNodeInfo"}}, "hash": "c5136fff856b86713872c3584fc0c788949062b6d7e1c7597e48fc22ed4a70f4", "text": "Gridded Datasets\n\n\n```python\nimport xarray as xr\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension('matplotlib')\n\nopts.defaults(opts.Scatter3D(color='Value', cmap='fire', edgecolor='black', s=50))\n```\n\nIn the Tabular Data guide we covered how to work with columnar data in HoloViews. Apart from tabular or column based data there is another data format that is particularly common in the science and engineering contexts, namely multi-dimensional arrays. The gridded data interfaces allow working with grid-based datasets directly.\n\nGrid-based datasets have two types of dimensions:\n\n* they have coordinate or key dimensions, which describe the sampling of each dimension in the value arrays\n* they have value dimensions which describe the quantity of the multi-dimensional value arrays\n\nThere are many different types of gridded datasets, which each approximate or measure a surface or space at discretely specified coordinates. In HoloViews, gridded datasets are typically one of three possible types: Regular rectilinear grids, irregular rectilinear grids, and curvilinear grids. Regular rectilinear grids can be defined by 1D coordinate arrays specifying the spacing along each dimension, while the other types require grid coordinates with the same dimensionality as the underlying value arrays, specifying the full n-dimensional coordinates of the corresponding array value. HoloViews provides many different elements supporting regularly spaced rectilinear grids, but currently only QuadMesh supports irregularly spaced rectilinear and curvilinear grids.\n\nThe difference between uniform, rectilinear and curvilinear grids is best illustrated by the figure below:\n\n\n \n Types of logically rectangular grid tiles. Red circles show the values needed to specify grid coordinates for each type. Reproduced from ESMF documentation\n\n\n\nIn this section we will first discuss how to work with the simpler rectilinear grids and then describe how to define a curvilinear grid with 2D coordinate arrays.", "start_char_idx": 2, "end_char_idx": 2034, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1f9dc12d-fa44-49af-9b99-5cf57f47c924": {"__data__": {"id_": "1f9dc12d-fa44-49af-9b99-5cf57f47c924", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e6783d1e-565f-408f-b9c0-2cbb68f1374a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e361e6ae7d935fcf225128259b26f1f5018dbd3ce0ddf99983ef61883c8038e9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fbf0b662-c1d1-4b07-b8d4-a9f6a075779e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c5136fff856b86713872c3584fc0c788949062b6d7e1c7597e48fc22ed4a70f4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f30f09a7-e051-411d-bc6a-91ca72822a1c", "node_type": "1", "metadata": {}, "hash": "96f48d7bd89512e4cae932eda07959903f036fc280bfa12c38026424cd13b1ea", "class_name": "RelatedNodeInfo"}}, "hash": "58dffdf66342d04c9c934dfd0bdc213572ca2f7ae4028dc69f029c6ff5334a69", "text": "Declaring gridded data\n\nAll Elements that support a ColumnInterface also support the GridInterface. The simplest example of a multi-dimensional (or more precisely 2D) gridded dataset is an image, which has implicit or explicit x-coordinates, y-coordinates and an array representing the values for each combination of these coordinates. Let us start by declaring an Image with explicit x- and y-coordinates:\n\n\n```python\nimg = hv.Image((range(10), range(5), np.random.rand(5, 10)), datatype=['grid'])\nimg\n```\n\nIn the above example we defined that there would be 10 samples along the x-axis, 5 samples along the y-axis and then defined a random ``5x10`` array, matching those dimensions. This follows the NumPy (row, column) indexing convention. When passing a tuple HoloViews will use the first gridded data interface, which stores the coordinates and value arrays as a dictionary mapping the dimension name to a NumPy array representing the data:\n\n\n```python\nimg.data\n```\n\nHowever HoloViews also ships with an interface for ``xarray`` and the GeoViews library ships with an interface for ``iris`` objects, which are two common libraries for working with multi-dimensional datasets:\n\n\n```python\narr_img = img.clone(datatype=['image'])\nprint(type(arr_img.data))\n\ntry: \n xr_img = img.clone(datatype=['xarray'])\n\n print(type(xr_img.data)) \nexcept:\n print('xarray interface could not be imported.')\n```\n\nIn the case of an Image HoloViews also has a simple image representation which stores the data as a single array and converts the x- and y-coordinates to a set of bounds:\n\n\n```python\nprint(\"Array type: %s with bounds %s\" % (type(arr_img.data), arr_img.bounds))\n```\n\nTo summarize the constructor accepts a number of formats where the value arrays should always match the shape of the coordinate arrays:\n\n 1. A simple np.ndarray along with (l, b, r, t) bounds\n 2. A tuple of the coordinate and value arrays\n 3. A dictionary of the coordinate and value arrays indexed by their dimension names\n 3. XArray DataArray or XArray Dataset\n 4. An Iris cube", "start_char_idx": 2, "end_char_idx": 2072, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f30f09a7-e051-411d-bc6a-91ca72822a1c": {"__data__": {"id_": "f30f09a7-e051-411d-bc6a-91ca72822a1c", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1146429a-022b-45c2-b96e-8499e10daee2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c43191f29b7a20c0ee85a39a074b731fbed65c422dd6fb31fdb2e5f881071c22", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1f9dc12d-fa44-49af-9b99-5cf57f47c924", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "58dffdf66342d04c9c934dfd0bdc213572ca2f7ae4028dc69f029c6ff5334a69", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6e8bfebc-f06c-4ed9-b6de-ae7a83867d15", "node_type": "1", "metadata": {}, "hash": "1bafe998bbd9708c1f06ffdb857deabd72b77a7a587f04b11fd47bacb4991450", "class_name": "RelatedNodeInfo"}}, "hash": "96f48d7bd89512e4cae932eda07959903f036fc280bfa12c38026424cd13b1ea", "text": "Working with a multi-dimensional dataset\n\nA gridded Dataset may have as many dimensions as desired, however individual Element types only support data of a certain dimensionality. Therefore we usually declare a ``Dataset`` to hold our multi-dimensional data and take it from there.\n\n\n```python\ndataset3d = hv.Dataset((range(3), range(5), range(7), np.random.randn(7, 5, 3)),\n ['x', 'y', 'z'], 'Value')\ndataset3d\n```\n\nThis is because even a 3D multi-dimensional array represents volumetric data which we can display easily only if it contains few samples. In this simple case we can get an overview of what this data looks like by casting it to a ``Scatter3D`` Element (which will help us visualize the operations we are applying to the data:\n\n\n```python\nhv.Scatter3D(dataset3d)\n```", "start_char_idx": 2, "end_char_idx": 805, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6e8bfebc-f06c-4ed9-b6de-ae7a83867d15": {"__data__": {"id_": "6e8bfebc-f06c-4ed9-b6de-ae7a83867d15", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "47f96e77-060e-436b-b2f1-d8a9f59674e1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bc243b7d61c2f2928c65200f793a1fd086c732f431b1129f4520a62954347459", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f30f09a7-e051-411d-bc6a-91ca72822a1c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "96f48d7bd89512e4cae932eda07959903f036fc280bfa12c38026424cd13b1ea", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5c261265-2721-4e94-a133-800fb9d46cfd", "node_type": "1", "metadata": {}, "hash": "2fc7f64dabae34a290e02eeaeac4bb8091e7c4705381e96caa3b1ccf9937d1bb", "class_name": "RelatedNodeInfo"}}, "hash": "1bafe998bbd9708c1f06ffdb857deabd72b77a7a587f04b11fd47bacb4991450", "text": "Indexing\n\nIn order to explore the dataset we therefore often want to define a lower dimensional slice into the array and then convert the dataset:\n\n\n```python\ndataset3d.select(x=1).to(hv.Image, ['y', 'z']) + hv.Scatter3D(dataset3d.select(x=1))\n```", "start_char_idx": 2, "end_char_idx": 249, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5c261265-2721-4e94-a133-800fb9d46cfd": {"__data__": {"id_": "5c261265-2721-4e94-a133-800fb9d46cfd", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "62b1dba4-bd56-426c-94e3-5159644a427f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a6f9e3e11c7cae7d9a932cfbdb8659748380ab8c06219fb2206aba62a4e922ed", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6e8bfebc-f06c-4ed9-b6de-ae7a83867d15", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1bafe998bbd9708c1f06ffdb857deabd72b77a7a587f04b11fd47bacb4991450", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7c47ae9e-8f29-4b0b-9914-084816ff95d9", "node_type": "1", "metadata": {}, "hash": "304892d8e10d1c798add89c74b593e92b2417a4ef7022b70f45920249a8658bf", "class_name": "RelatedNodeInfo"}}, "hash": "2fc7f64dabae34a290e02eeaeac4bb8091e7c4705381e96caa3b1ccf9937d1bb", "text": "Groupby\n\nAnother common method to apply to our data is to facet or animate the data using ``groupby`` operations. HoloViews provides a convenient interface to apply ``groupby`` operations and select which dimensions to visualize. \n\n\n```python\n(dataset3d.to(hv.Image, ['y', 'z'], 'Value', ['x']) +\nhv.HoloMap({x: hv.Scatter3D(dataset3d.select(x=x)) for x in range(3)}, kdims='x'))\n```", "start_char_idx": 2, "end_char_idx": 385, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7c47ae9e-8f29-4b0b-9914-084816ff95d9": {"__data__": {"id_": "7c47ae9e-8f29-4b0b-9914-084816ff95d9", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4f7fcdd8-9a80-448d-8426-1ebb3af79986", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9d01b535a6b14322536383e1349740cf0708c471bd3348834709a8438a026c1d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5c261265-2721-4e94-a133-800fb9d46cfd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2fc7f64dabae34a290e02eeaeac4bb8091e7c4705381e96caa3b1ccf9937d1bb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "803c5cd4-5912-4a9e-937d-c3a14736df39", "node_type": "1", "metadata": {}, "hash": "8124f8fb1d345eb373e13483806233f762f536cf7553e802480f298b4c95188e", "class_name": "RelatedNodeInfo"}}, "hash": "304892d8e10d1c798add89c74b593e92b2417a4ef7022b70f45920249a8658bf", "text": "Aggregating\n\nAnother common operation is to aggregate the data with a function thereby reducing a dimension. You can either ``aggregate`` the data by passing the dimensions to aggregate or ``reduce`` a specific dimension. Both have the same function:\n\n\n```python\nhv.Image(dataset3d.aggregate(['x', 'y'], np.mean)) + hv.Image(dataset3d.reduce(z=np.mean))\n```\n\nBy aggregating the data we can reduce it to any number of dimensions we want. We can for example compute the spread of values for each z-coordinate and plot it using a ``Spread`` and ``Curve`` Element. We simply aggregate by that dimension and pass the aggregation functions we want to apply:\n\n\n```python\nhv.Spread(dataset3d.aggregate('z', np.mean, np.std)) * hv.Curve(dataset3d.aggregate('z', np.mean))\n```\n\nIt is also possible to generate lower-dimensional views into the dataset which can be useful to summarize the statistics of the data along a particular dimension. A simple example is a box-whisker of the ``Value`` for each x-coordinate. Using the ``.to`` conversion interface we declare that we want a ``BoxWhisker`` Element indexed by the ``x`` dimension showing the ``Value`` dimension. Additionally we have to ensure to set ``groupby`` to an empty list because by default the interface will group over any remaining dimension.\n\n\n```python\ndataset3d.to(hv.BoxWhisker, 'x', 'Value', groupby=[])\n```\n\nSimilarly we can generate a ``Distribution`` Element showing the ``Value`` dimension, group by the 'x' dimension and then overlay the distributions, giving us another statistical summary of the data:\n\n\n```python\ndataset3d.to(hv.Distribution, 'Value', [], groupby='x').overlay()\n```", "start_char_idx": 2, "end_char_idx": 1652, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "803c5cd4-5912-4a9e-937d-c3a14736df39": {"__data__": {"id_": "803c5cd4-5912-4a9e-937d-c3a14736df39", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6760058b-0b76-4bd8-a06f-577e41121c93", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9585ffa51d75e9f17c0df5f7ce893b404d5dc6c68a99de6e1b2058f3247dd78f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7c47ae9e-8f29-4b0b-9914-084816ff95d9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "304892d8e10d1c798add89c74b593e92b2417a4ef7022b70f45920249a8658bf", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a3bca419-b6a0-4b14-b246-39502a33cc1b", "node_type": "1", "metadata": {}, "hash": "6da3efeac8b69d6cd258e5bad35b97f01db33c94e967f11bd732222a74d49e84", "class_name": "RelatedNodeInfo"}}, "hash": "8124f8fb1d345eb373e13483806233f762f536cf7553e802480f298b4c95188e", "text": "Categorical dimensions\n\nThe key dimensions of the multi-dimensional arrays do not have to represent continuous values, we can display datasets with categorical variables as a ``HeatMap`` Element:\n\n\n```python\nheatmap = hv.HeatMap((['A', 'B', 'C'], ['a', 'b', 'c', 'd', 'e'], np.random.rand(5, 3)))\nheatmap + hv.Table(heatmap)\n```", "start_char_idx": 2, "end_char_idx": 330, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a3bca419-b6a0-4b14-b246-39502a33cc1b": {"__data__": {"id_": "a3bca419-b6a0-4b14-b246-39502a33cc1b", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ebe7e6da-b8a4-491e-9ec4-e4c8044c91e4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6afcec2d6c4d4dc6893c7a7ddc0bd23993d726968ef3a093ad9a9929aae95f81", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "803c5cd4-5912-4a9e-937d-c3a14736df39", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8124f8fb1d345eb373e13483806233f762f536cf7553e802480f298b4c95188e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2c3361b7-d869-49b2-945e-3b8ea26eb316", "node_type": "1", "metadata": {}, "hash": "079b1097b060bd10c2c508357c308b0a9c93e4aa48856724117cc8354f26af8e", "class_name": "RelatedNodeInfo"}}, "hash": "6da3efeac8b69d6cd258e5bad35b97f01db33c94e967f11bd732222a74d49e84", "text": "Non-uniform rectilinear grids\n\nAs discussed above, there are two main types of grids handled by HoloViews. So far, we have mainly dealt with uniform, rectilinear grids, but we can use the ``QuadMesh`` element to work with non-uniform rectilinear grids and curvilinear grids.\n\nIn order to define a non-uniform, rectilinear grid we can declare explicit irregularly spaced x- and y-coordinates. In the example below we specify the x/y-coordinate bin edges of the grid as arrays of shape ``M+1`` and ``N+1`` and a value array (``zs``) of shape ``NxM``:\n\n\n```python\nn = 8 # Number of bins in each direction\nxs = np.logspace(1, 3, n)\nys = np.linspace(1, 10, n)\nzs = np.arange((n-1)**2).reshape(n-1, n-1)\nprint('Shape of x-coordinates:', xs.shape)\nprint('Shape of y-coordinates:', ys.shape)\nprint('Shape of value array:', zs.shape)\nhv.QuadMesh((xs, ys, zs))\n```", "start_char_idx": 2, "end_char_idx": 858, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2c3361b7-d869-49b2-945e-3b8ea26eb316": {"__data__": {"id_": "2c3361b7-d869-49b2-945e-3b8ea26eb316", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2f8deaa1-1e14-43ca-b94c-f9247f547292", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a683a17cafc76842523a1437b2e8f2eb6dd64cc4251a4e1a76a2ad5fe80cb399", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a3bca419-b6a0-4b14-b246-39502a33cc1b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6da3efeac8b69d6cd258e5bad35b97f01db33c94e967f11bd732222a74d49e84", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "43dd7d3e-a561-4388-8269-51ae14d41b05", "node_type": "1", "metadata": {}, "hash": "7c7d473f86cd73f508d8145eaa14b2ecf8d145ac2b37f6929ed5cadf0f4d8dff", "class_name": "RelatedNodeInfo"}}, "hash": "079b1097b060bd10c2c508357c308b0a9c93e4aa48856724117cc8354f26af8e", "text": "Curvilinear grids\n\nTo define a curvilinear grid the x/y-coordinates of the grid should be defined as 2D arrays of shape ``NxM`` or ``N+1xM+1``, i.e. either as the bin centers or the bin edges of each 2D bin.\n\n\n```python\nn=20\ncoords = np.linspace(-1.5,1.5,n)\nX,Y = np.meshgrid(coords, coords);\nQx = np.cos(Y) - np.cos(X)\nQy = np.sin(Y) + np.sin(X)\nZ = np.sqrt(X**2 + Y**2)\n\nprint('Shape of x-coordinates:', Qx.shape)\nprint('Shape of y-coordinates:', Qy.shape)\nprint('Shape of value array:', Z.shape)\n\nqmesh = hv.QuadMesh((Qx, Qy, Z))\nqmesh\n```", "start_char_idx": 2, "end_char_idx": 544, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "43dd7d3e-a561-4388-8269-51ae14d41b05": {"__data__": {"id_": "43dd7d3e-a561-4388-8269-51ae14d41b05", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "df09742c-833c-49a7-bd14-2d96c4617f8c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "da03bf22af87d4688967022679a6d2a99b337495e179be154708682066e1a0da", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2c3361b7-d869-49b2-945e-3b8ea26eb316", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "079b1097b060bd10c2c508357c308b0a9c93e4aa48856724117cc8354f26af8e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e3f2e6d1-8381-4431-81d4-e6f9ec056201", "node_type": "1", "metadata": {}, "hash": "7cd433820f04591482d91347125a4c17def634acf66fcc7eb4ebc58bd37d0688", "class_name": "RelatedNodeInfo"}}, "hash": "7c7d473f86cd73f508d8145eaa14b2ecf8d145ac2b37f6929ed5cadf0f4d8dff", "text": "Working with xarray data types\nAs demonstrated previously, `Dataset` comes with support for the `xarray` library, which offers a powerful way to work with multi-dimensional, regularly spaced data. In this example, we'll load an example dataset, turn it into a HoloViews `Dataset` and visualize it. First, let's have a look at the xarray dataset's contents:\n\n\n```python\nxr_ds = xr.tutorial.open_dataset(\"air_temperature\").load()\nxr_ds\n```\n\nIt is trivial to turn this xarray Dataset into a Holoviews `Dataset` (the same also works for DataArray):\n\n\n```python\nhv_ds = hv.Dataset(xr_ds)[:, :, \"2013-01-01\"]\nprint(hv_ds)\n```\n\nWe have used the usual slice notation in order to select one single day in the rather large dataset. Finally, let's visualize the dataset by converting it to a `HoloMap` of `Images` using the `to()` method. We need to specify which of the dataset's key dimensions will be consumed by the images (in this case \"lat\" and \"lon\"), where the remaining key dimensions will be associated with the HoloMap (here: \"time\"). We'll use the slice notation again to clip the longitude.\n\n\n```python\nairtemp = hv_ds.to(hv.Image, kdims=[\"lon\", \"lat\"], dynamic=False)\nairtemp[:, 220:320, :].opts(colorbar=True, fig_size=200)\n```\n\nHere, we have explicitly specified the default behaviour `dynamic=False`, which returns a HoloMap. Note, that this approach immediately converts all available data to images, which will take up a lot of RAM for large datasets. For these situations, use `dynamic=True` to generate a DynamicMap instead. Additionally, xarray features dask support, which is helpful when dealing with large amounts of data.\n\nIt is also possible to render curvilinear grids with xarray, and here we will load one such example. The dataset below defines a curvilinear grid of air temperatures varying over time. The curvilinear grid can be identified by the fact that the ``xc`` and ``yc`` coordinates are defined as two-dimensional arrays:\n\n\n```python\nrasm = xr.tutorial.open_dataset(\"rasm\").load()\nrasm.coords\n```\n\nTo simplify the example we will select a single timepoint and add explicit coordinates for the x and y dimensions:\n\n\n```python\nrasm = rasm.isel(time=0, x=slice(0, 200)).assign_coords(x=np.arange(200), y=np.arange(205))\nrasm.coords\n```\n\nNow that we have defined both rectilinear and curvilinear coordinates we can visualize the difference between the two by explicitly defining which set of coordinates to use:\n\n\n```python\nhv.QuadMesh(rasm, ['x', 'y']) + hv.QuadMesh(rasm, ['xc', 'yc'])\n```\n\n\n\nAdditional examples of visualizing xarrays in the context of geographical data can be found in the GeoViews documentation: Gridded Datasets I and\nGridded Datasets II. These guides also contain useful information on the interaction between xarray data structures and HoloViews Datasets in general.", "start_char_idx": 2, "end_char_idx": 2819, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e3f2e6d1-8381-4431-81d4-e6f9ec056201": {"__data__": {"id_": "e3f2e6d1-8381-4431-81d4-e6f9ec056201", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a5a1dd76-29e5-43ae-b82d-5b440a900663", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "26a6574e9729f8676ffe18ced44776dd0eb5e50a1e92dfa0965e8839987bc6d7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "43dd7d3e-a561-4388-8269-51ae14d41b05", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7c7d473f86cd73f508d8145eaa14b2ecf8d145ac2b37f6929ed5cadf0f4d8dff", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "696a6435-8a70-4494-a583-2350c822b732", "node_type": "1", "metadata": {}, "hash": "458fd9e51a789bdf807ea1a092966a3d152b72c8202b4da3b4d7d9db95a9e802", "class_name": "RelatedNodeInfo"}}, "hash": "7cd433820f04591482d91347125a4c17def634acf66fcc7eb4ebc58bd37d0688", "text": "API", "start_char_idx": 2, "end_char_idx": 5, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "696a6435-8a70-4494-a583-2350c822b732": {"__data__": {"id_": "696a6435-8a70-4494-a583-2350c822b732", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bfa9bff3-0f18-4aa5-87a4-12094a1a457c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "510bbec5fb05f47b468b1646e27d22e919c32c4904c751e27b6788c622dd7952", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e3f2e6d1-8381-4431-81d4-e6f9ec056201", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7cd433820f04591482d91347125a4c17def634acf66fcc7eb4ebc58bd37d0688", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ab8d5527-d13e-40c5-8f8c-92d5bca3db58", "node_type": "1", "metadata": {}, "hash": "907135dccdc06d2340d1680c3f013f868a78257220c8a47d1f7db867ebb27e9c", "class_name": "RelatedNodeInfo"}}, "hash": "458fd9e51a789bdf807ea1a092966a3d152b72c8202b4da3b4d7d9db95a9e802", "text": "Accessing the data\n\nIn order to be able to work with data in different formats Holoviews defines a general interface to access the data. The dimension_values method allows returning underlying arrays.", "start_char_idx": 2, "end_char_idx": 202, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ab8d5527-d13e-40c5-8f8c-92d5bca3db58": {"__data__": {"id_": "ab8d5527-d13e-40c5-8f8c-92d5bca3db58", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ac58fbdd-8350-4af4-9c9c-91cf6f9ff526", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5a20c3e83fe7971334f683c5df4ee9f4b3ce89f6ef2e960d448da552e2ebc85a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "696a6435-8a70-4494-a583-2350c822b732", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "458fd9e51a789bdf807ea1a092966a3d152b72c8202b4da3b4d7d9db95a9e802", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "846f532b-76a8-4a96-991d-c5f2826b4941", "node_type": "1", "metadata": {}, "hash": "fa96cb89b35bb97bbec7ef6cdb4afda7459e75ef6982c447f911f2c58a26cc8e", "class_name": "RelatedNodeInfo"}}, "hash": "907135dccdc06d2340d1680c3f013f868a78257220c8a47d1f7db867ebb27e9c", "text": "Key dimensions (coordinates)\n\nBy default ``dimension_values`` will return the expanded columnar format of the data:\n\n\n```python\nheatmap.dimension_values('x')\n```\n\nTo access just the unique coordinates along a dimension simply supply the ``expanded=False`` keyword:\n\n\n```python\nheatmap.dimension_values('x', expanded=False)\n```\n\nFinally we can also get a non-flattened, expanded coordinate array returning a coordinate array of the same shape as the value arrays\n\n\n```python\nheatmap.dimension_values('x', flat=False)\n```", "start_char_idx": 2, "end_char_idx": 521, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "846f532b-76a8-4a96-991d-c5f2826b4941": {"__data__": {"id_": "846f532b-76a8-4a96-991d-c5f2826b4941", "embedding": null, "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "10e43059-88b0-415f-a932-baafad83601a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "edca39052aa7e4b1bb0ca70e3cf4d0bdf5197ac8fee7c18a3c98b05b605cdc3e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ab8d5527-d13e-40c5-8f8c-92d5bca3db58", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "907135dccdc06d2340d1680c3f013f868a78257220c8a47d1f7db867ebb27e9c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c79944a0-2a07-4605-981a-cfeb5001a357", "node_type": "1", "metadata": {}, "hash": "a3866c17e5a9edc9f0ca5edbf1041fc7cf1adc88deae14d33062b30a6ecb7c37", "class_name": "RelatedNodeInfo"}}, "hash": "fa96cb89b35bb97bbec7ef6cdb4afda7459e75ef6982c447f911f2c58a26cc8e", "text": "Value dimensions\n\nWhen accessing a value dimension the method will similarly return a flat view of the data:\n\n\n```python\nheatmap.dimension_values('z')\n```\n\nWe can pass the ``flat=False`` argument to access the multi-dimensional array:\n\n\n```python\nheatmap.dimension_values('z', flat=False)\n```", "start_char_idx": 2, "end_char_idx": 294, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c79944a0-2a07-4605-981a-cfeb5001a357": {"__data__": {"id_": "c79944a0-2a07-4605-981a-cfeb5001a357", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "763c41dc-2c69-478d-9c5a-98055a597c20", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "886fcec23204614f156fd20efbebf36c27deaabcffd24d5cfc885fc98338f212", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "846f532b-76a8-4a96-991d-c5f2826b4941", "node_type": "1", "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fa96cb89b35bb97bbec7ef6cdb4afda7459e75ef6982c447f911f2c58a26cc8e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b75dfd7c-896b-4847-b6da-f9c599a27c84", "node_type": "1", "metadata": {}, "hash": "44036f75493ab5ff8223dfce9dafa28686f1a562a99c61fff623e72d6d47ed81", "class_name": "RelatedNodeInfo"}}, "hash": "a3866c17e5a9edc9f0ca5edbf1041fc7cf1adc88deae14d33062b30a6ecb7c37", "text": "Indexing and Selecting data\n\nAs explained in the Building composite objects and Dimensioned Containers guides, HoloViews allows building up hierarchical containers that express the natural relationships between data items, in whatever multidimensional space best characterizes the application domain. Once your data is in such containers, individual visualizations are then made by choosing subregions of this multidimensional space, either smaller numeric ranges (as in cropping of photographic images), or lower-dimensional subsets (as in selecting frames from a movie, or a specific movie from a large library), or both (as in selecting a cropped version of a frame from a specific movie from a large library). \n\nIn this user guide, we show how to specify such selections, using five different (but related) operations that can act on an element ``e``:\n\n| Operation | Example syntax | Description |\n|:---------------|:----------------:|:-------------|\n| **indexing** | e[5.5], e[3,5.5] | Selecting a single data value, returning one actual numerical value from the existing data\n| **slice** | e[3:5.5], e[3:5.5,0:1] | Selecting a contiguous portion from an Element, returning the same type of Element\n| **sample** | e.sample(y=5.5),e.sample((3,3)) | Selecting one or more regularly spaced data values, returning a new type of Element\n| **select** | e.select(y=5.5),e.select(y=(3,5.5)) | More verbose notation covering all supported slice and index operations by dimension name.\n| **iloc** | e[2, :],e[2:5, :] | Indexes and slices by row and column tabular index supporting integer indexes, slices, lists and boolean indices.\n\nThese operations are all concerned with selecting some subset of the data values, without combining across data values (e.g. averaging) or otherwise transforming the actual data. In the Tabular Data user guide we will look at additional operations on the data that reduce, summarize, or transform the data in other ways, in addition to the selections covered here.\n\nWe'll be going through each operation in detail and provide a visual illustration to help make the semantics of each operation clear. This user guide assumes that you are familiar with continuous and discrete coordinate systems, so please review our Continuous Coordinates guide if you have not done so already.\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('bokeh', 'matplotlib')\n\nopts.defaults(\n opts.Bounds(line_width=2, color='red', axiswise=True),\n opts.Image(cmap='Blues'),\n opts.Points(size=8, padding=0.1),\n opts.Text(text_font_size='16pt'), opts.Scatter(size=5))\n```", "start_char_idx": 2, "end_char_idx": 2666, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b75dfd7c-896b-4847-b6da-f9c599a27c84": {"__data__": {"id_": "b75dfd7c-896b-4847-b6da-f9c599a27c84", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fb2ca3f1-ce69-4098-8f6b-3390059ab252", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e644bfe7c62f3804912f68f3b280058654972b831c7bfac449735b48d005501b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c79944a0-2a07-4605-981a-cfeb5001a357", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a3866c17e5a9edc9f0ca5edbf1041fc7cf1adc88deae14d33062b30a6ecb7c37", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f79444b6-f6bd-4ebd-942c-5c2ddd12fb9a", "node_type": "1", "metadata": {}, "hash": "171f149535a0e179fb5fda27dc142535ef0d9fcfabc69a5d18a80547e3f6ba93", "class_name": "RelatedNodeInfo"}}, "hash": "44036f75493ab5ff8223dfce9dafa28686f1a562a99c61fff623e72d6d47ed81", "text": "Indexing and slicing Elements\n\nIn the Dimensioned Containers guide we saw examples of how to select individual elements embedded in a multi-dimensional space. The Continuous Coordinates user guide covered slicing and indexing in Elements representing continuous coordinate coordinate systems such as ``Image`` types. Here we'll be going through each operation in full detail, providing a visual illustration to help make the semantics of each operation clear.\n\nHow the ``Element`` may be indexed depends on the key dimensions (or ``kdims``) of the ``Element``. It is thus important to consider the nature and dimensionality of your data when choosing the ``Element`` type for it.", "start_char_idx": 2, "end_char_idx": 682, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f79444b6-f6bd-4ebd-942c-5c2ddd12fb9a": {"__data__": {"id_": "f79444b6-f6bd-4ebd-942c-5c2ddd12fb9a", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9ddcc535-6c13-4ae9-8669-18a01233c95e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b3d3df169d68b3c8f26ef5d4fd9f07dd78f96acc6615ffbc7b90c28169f40630", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b75dfd7c-896b-4847-b6da-f9c599a27c84", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "44036f75493ab5ff8223dfce9dafa28686f1a562a99c61fff623e72d6d47ed81", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "96db5a8e-9fb0-489c-9856-6e3dbace9925", "node_type": "1", "metadata": {}, "hash": "78738ddc6dbbcdb8bff8a1b138d3e557f0ddcafe109562556beee6087a0dc634", "class_name": "RelatedNodeInfo"}}, "hash": "171f149535a0e179fb5fda27dc142535ef0d9fcfabc69a5d18a80547e3f6ba93", "text": "1D Elements: Slicing and indexing\n\nCertain Chart elements support both single-dimensional indexing and slicing: ``Scatter``, ``Curve``, ``Histogram``, and ``ErrorBars``. Here we'll look at how we can easily slice a ``Histogram`` to select a subregion of it:\n\n\n```python\nnp.random.seed(42)\nedges, data = np.histogram(np.random.randn(100))\nhist = hv.Histogram((edges, data))\nsubregion = hist[0:1]\nhist * subregion\n```\n\nThe two bins in a different color show the selected region, overlaid on top of the full histogram. We can also access the value for a specific bin in the ``Histogram``. A continuous-valued index that falls inside a particular bin will return the corresponding value or frequency.\n\n\n```python\nhist[0.25], hist[0.5], hist[0.55]\n```\n\nWe can slice a ``Curve`` the same way:\n\n\n```python\nxs = np.linspace(0, np.pi*2, 21)\ncurve = hv.Curve((xs, np.sin(xs)))\nsubregion = curve[np.pi/2:np.pi*1.5]\ncurve * subregion * hv.Scatter(curve)\n```\n\nHere again the region in a different color is the specified subregion. We've also marked each discrete point with a dot using the ``Scatter`` ``Element``. As before we can also get the value for a specific sample point; whatever x-index is provided will snap to the closest sample point and return the dependent value:\n\n\n```python\ncurve[4.05], curve[4.1], curve[4.17], curve[4.3]\n```\n\nIt is important to note that an index (or a list of indices, as for the 2D and 3D cases below) will always return the raw indexed (dependent) value, i.e. a number. A slice (indicated with `:`), on the other hand, will retain the Element type even in cases where the plot might not be useful, such as having only a single value, two values, or no value at all in that range:\n\n\n```python\ncurve[4:4.5]\n```", "start_char_idx": 2, "end_char_idx": 1739, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "96db5a8e-9fb0-489c-9856-6e3dbace9925": {"__data__": {"id_": "96db5a8e-9fb0-489c-9856-6e3dbace9925", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6050b290-2e20-40d9-a0db-e720b77d77af", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6996bc4b2d862fb68b0e986dfd3244d8e09d3ac8473d2a1dcceb64024dbc10e5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f79444b6-f6bd-4ebd-942c-5c2ddd12fb9a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "171f149535a0e179fb5fda27dc142535ef0d9fcfabc69a5d18a80547e3f6ba93", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c25c582b-8b7d-45db-b815-111780cf1b1c", "node_type": "1", "metadata": {}, "hash": "c70f94d429331f4752d72bf34f5119e13cd5ebd7c894dbae926bf589907f3c2c", "class_name": "RelatedNodeInfo"}}, "hash": "78738ddc6dbbcdb8bff8a1b138d3e557f0ddcafe109562556beee6087a0dc634", "text": "2D and 3D Elements: slicing\n\nFor data defined in a 2D space, there are 2D equivalents of the 1D ``Curve`` and ``Scatter`` types. ``Points``, for example, can be thought of as a number of points in a 2D space.\n\n\n```python\nr = np.arange(0, 1, 0.005)\nxs, ys = (r * fn(85*np.pi*r) for fn in (np.cos, np.sin))\npaths = hv.Points((xs, ys))\npaths + paths[0:1, 0:1]\n```\n\nHowever, indexing is not supported in this space, because there could be many possible points near a given set of coordinates, and finding the nearest one would require a search across potentially incommensurable dimensions, which is poorly defined and difficult to support.\n\nSlicing in 3D works much like slicing in 2D, but indexing is not supported for the same reason as in 2D:\n\n\n```python\nxs = np.linspace(0, np.pi*8, 201)\nscatter = hv.Scatter3D((xs, np.sin(xs), np.cos(xs)))\nlayout = scatter + scatter[5:10, :, 0:]\nhv.output(layout, backend='matplotlib')\n```", "start_char_idx": 2, "end_char_idx": 927, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c25c582b-8b7d-45db-b815-111780cf1b1c": {"__data__": {"id_": "c25c582b-8b7d-45db-b815-111780cf1b1c", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d0ecde18-8418-4bcf-886a-fcc974c84640", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "24449b39c4044f89a6ea3c7e54583712675909bf7b4e22fb4659af41bf5cbafa", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "96db5a8e-9fb0-489c-9856-6e3dbace9925", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "78738ddc6dbbcdb8bff8a1b138d3e557f0ddcafe109562556beee6087a0dc634", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d3e75648-c536-4bc7-996a-82a9211916e6", "node_type": "1", "metadata": {}, "hash": "486ef56f200a15a875a785162d50ba2e9364babdedb355af46395183506b4e24", "class_name": "RelatedNodeInfo"}}, "hash": "c70f94d429331f4752d72bf34f5119e13cd5ebd7c894dbae926bf589907f3c2c", "text": "2D Raster and Image: slicing and indexing\n\nRaster and the various other image-like objects (Images, RGB, HSV, etc.) can all be sliced and indexed, as can Surface, because they all have an underlying regular grid of key dimension values:\n\n\n```python\nnp.random.seed(0)\nextents = (0, 0, 10, 10)\nimg = hv.Image(np.random.rand(10, 10), bounds=extents)\nimg_slice = img[1:9,4:5]\nbox = hv.Bounds((1,4,9,5))\nimg*box + img_slice\n```\n\n\n```python\nimg[4.2,4.2], img[4.3,4.2], img[5.0,4.2]\n```", "start_char_idx": 2, "end_char_idx": 481, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d3e75648-c536-4bc7-996a-82a9211916e6": {"__data__": {"id_": "d3e75648-c536-4bc7-996a-82a9211916e6", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "597efb37-4796-4536-aef9-ba194f78bcbc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5387051c2daa8ecc929b232d9f48a1a3b740218052d9adc7f9e3d16f375e41b3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c25c582b-8b7d-45db-b815-111780cf1b1c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c70f94d429331f4752d72bf34f5119e13cd5ebd7c894dbae926bf589907f3c2c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2d93049a-6d79-47ea-b20f-4020e851ee0d", "node_type": "1", "metadata": {}, "hash": "485f872a9c91767baa6b6bde2412296968606a0797cc508c733a45b585f83279", "class_name": "RelatedNodeInfo"}}, "hash": "486ef56f200a15a875a785162d50ba2e9364babdedb355af46395183506b4e24", "text": "Tabular indexing and slicing\n\nWhile most indexing in HoloViews works by selecting the values along a dimension it is also frequently useful to index and slice using integer row and column indices. For this purpose most HoloViews objects have a ``.iloc`` indexing interface (mirroring the pandas API), which supports all the usual indexing semantics. Supported iloc arguments include:\n\n* An integer e.g. 5\n\n* A list or array of integers [4, 3, 0]\n\n* A slice object with ints 1:7\n\n* A boolean array", "start_char_idx": 2, "end_char_idx": 498, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2d93049a-6d79-47ea-b20f-4020e851ee0d": {"__data__": {"id_": "2d93049a-6d79-47ea-b20f-4020e851ee0d", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "44c217a2-f8f7-4f53-92df-72bce3888c58", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e66370b4e24236bbe6cb52ec9f50f7883f70539fc050575425f0c68f03dc5c17", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d3e75648-c536-4bc7-996a-82a9211916e6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "486ef56f200a15a875a785162d50ba2e9364babdedb355af46395183506b4e24", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3ce92a65-0eb6-4aa0-8469-2ef1773b2044", "node_type": "1", "metadata": {}, "hash": "591257a1adf102997f7c18f511d54b796b124d9c635ba0c7a86f2a37e6d52c37", "class_name": "RelatedNodeInfo"}}, "hash": "485f872a9c91767baa6b6bde2412296968606a0797cc508c733a45b585f83279", "text": "Indexing\n\nIn this way we can for example select the x- and y-values in the 8th row of our ``Curve``:\n\n\n```python\nxs = np.linspace(0, np.pi*2, 21)\ncurve = hv.Curve((xs, np.sin(xs)))\nprint('x: %s, y: %s' % (curve.iloc[8, 0], curve.iloc[8, 1]))\ncurve * hv.Scatter(curve.iloc[8])\n```", "start_char_idx": 2, "end_char_idx": 281, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3ce92a65-0eb6-4aa0-8469-2ef1773b2044": {"__data__": {"id_": "3ce92a65-0eb6-4aa0-8469-2ef1773b2044", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2a6554a7-ed4e-47a2-bb03-ab150264a69c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "52f9ac37a897f99f5c79a42c527ef3d2f6196d284dc64cb27d59a020436e314a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2d93049a-6d79-47ea-b20f-4020e851ee0d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "485f872a9c91767baa6b6bde2412296968606a0797cc508c733a45b585f83279", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "85a2aeeb-5bc5-4c5b-ab17-f43e70425bf0", "node_type": "1", "metadata": {}, "hash": "6a5d80a260f671d84fd333a028c561d3beee5afa2a036d70612dc337958178c0", "class_name": "RelatedNodeInfo"}}, "hash": "591257a1adf102997f7c18f511d54b796b124d9c635ba0c7a86f2a37e6d52c37", "text": "Slicing\n\nAlternatively we can select every second sample between indices 5 and 16 of a ``Curve``:\n\n\n```python\ncurve + curve.iloc[5:16:2]\n```", "start_char_idx": 2, "end_char_idx": 142, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "85a2aeeb-5bc5-4c5b-ab17-f43e70425bf0": {"__data__": {"id_": "85a2aeeb-5bc5-4c5b-ab17-f43e70425bf0", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2ca973ca-38e8-467d-ab50-d4956c09de49", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b6f8941fe43f3247c3549a57af4f83a2661926df1a70f8e88a0fdb3799ed3112", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3ce92a65-0eb6-4aa0-8469-2ef1773b2044", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "591257a1adf102997f7c18f511d54b796b124d9c635ba0c7a86f2a37e6d52c37", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e004ddba-9ab9-45da-a825-571360f2a216", "node_type": "1", "metadata": {}, "hash": "a7c71d9ede029b61f2136e66985a0f4f3996572b08c54ad1587b60c63de63959", "class_name": "RelatedNodeInfo"}}, "hash": "6a5d80a260f671d84fd333a028c561d3beee5afa2a036d70612dc337958178c0", "text": "Lists of integers and boolean indices\n\nFinally we may also pass a list of the integer samples to select, or use boolean indices. This mode of indexing can be very useful for randomly sampling an Element or picking a specific set of rows or (columns):\n\n\n```python\ncurve.iloc[[0, 5, 10, 15, 20]] + curve.iloc[xs>3]\n```", "start_char_idx": 2, "end_char_idx": 318, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e004ddba-9ab9-45da-a825-571360f2a216": {"__data__": {"id_": "e004ddba-9ab9-45da-a825-571360f2a216", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "368a37ae-0d5f-4de8-b8dc-bd2fd255311f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "360526bb2682ac5024fbc7e68b3e13e5c259bd51f75efca6af164b2791a3cf42", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "85a2aeeb-5bc5-4c5b-ab17-f43e70425bf0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6a5d80a260f671d84fd333a028c561d3beee5afa2a036d70612dc337958178c0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "97339eb5-72a6-4888-a277-f3ea18b36bfa", "node_type": "1", "metadata": {}, "hash": "a719986aef3349d50d048da9b90e6dc94cb7d51bc1e9d64495686a83cc081bac", "class_name": "RelatedNodeInfo"}}, "hash": "a7c71d9ede029b61f2136e66985a0f4f3996572b08c54ad1587b60c63de63959", "text": "Sampling\n\nSampling is essentially a process of indexing an Element at multiple index locations, and collecting the results. Thus any Element that can be indexed can also be sampled. Compared to regular indexing, sampling is different in that multiple indices may be supplied at the same time. Also, indexing will only return the value at that location, whereas the return type from a sampling operation is another ``Element`` type, usually either a ``Table`` or a ``Curve``, to allow both key and value dimensions to be returned.", "start_char_idx": 2, "end_char_idx": 535, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "97339eb5-72a6-4888-a277-f3ea18b36bfa": {"__data__": {"id_": "97339eb5-72a6-4888-a277-f3ea18b36bfa", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "34092c52-c063-432c-968c-948778f461c8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b0d9eab7f737492c5fa3776b7554dac91cd9309c4a87bb05fda1608d4238987a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e004ddba-9ab9-45da-a825-571360f2a216", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a7c71d9ede029b61f2136e66985a0f4f3996572b08c54ad1587b60c63de63959", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "242b2d69-ebad-4db9-83c9-4332f5e3f3ce", "node_type": "1", "metadata": {}, "hash": "1d31fdf2ba4b22413e8915347e95735d65986430e8ca41d63f34c4a3b415a892", "class_name": "RelatedNodeInfo"}}, "hash": "a719986aef3349d50d048da9b90e6dc94cb7d51bc1e9d64495686a83cc081bac", "text": "Sampling Elements\n\nSampling can use either an explicit list of indexes, or pass an index value for each dimension keyword argument.\n\nWe'll start by taking a single sample of an Image object, to make clear how sampling and indexing are similar operations yet different in their results:\n\n\n```python\nimg_coords = hv.Points(img, extents=extents)\nlabeled_img = img * img_coords * hv.Points([img.closest([(4.1,4.3)])]).opts(color='r')\nimg + labeled_img + img.sample([(4.1,4.3)])\n```\n\n\n```python\nimg[4.1,4.3]\n```\n\nHere, the output of the indexing operation is the value (0.20887675609483469) from the location closest to the specified indexes, whereas ``.sample()`` returns a Table that lists both the coordinates *and* the value, and slicing (in previous section) returns an Element of the same type, not a Table.\n\n\nNext we can try sampling along only one Dimension on our 2D Image, leaving us with a 1D Element (in this case a ``Curve``):\n\n\n```python\nsampled = img.sample(y=5)\nlabeled_img = img * img_coords * hv.Points(zip(sampled['x'], [img.closest(y=5)]*10))\nimg + labeled_img + sampled\n```\n\nSampling works on any regularly sampled Element type. For example, we can select multiple samples along the x-axis of a Curve.\n\n\n```python\nxs = np.arange(10)\nsamples = [2, 4, 6, 8]\ncurve = hv.Curve(zip(xs, np.sin(xs)))\ncurve_samples = hv.Scatter(zip(xs, [0] * 10)) * hv.Scatter(zip(samples, [0]*len(samples))) \ncurve + curve_samples + curve.sample(samples)\n```", "start_char_idx": 2, "end_char_idx": 1454, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "242b2d69-ebad-4db9-83c9-4332f5e3f3ce": {"__data__": {"id_": "242b2d69-ebad-4db9-83c9-4332f5e3f3ce", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cd5ccd72-8189-47a0-9ac7-29014ec7d2f6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4ab516fd68664fe19a389f3db370078e6dc4a32853157ffdb82c0e4be420db8a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "97339eb5-72a6-4888-a277-f3ea18b36bfa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a719986aef3349d50d048da9b90e6dc94cb7d51bc1e9d64495686a83cc081bac", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fa317e36-a812-470b-95bd-4c4594759838", "node_type": "1", "metadata": {}, "hash": "b6ef5dd1943f8d95ee6385a6b39ab7b100ccdb8ddc3e3b85767b3f8b3c0f757d", "class_name": "RelatedNodeInfo"}}, "hash": "1d31fdf2ba4b22413e8915347e95735d65986430e8ca41d63f34c4a3b415a892", "text": "Sampling HoloMaps\n\nSampling is often useful when you have more data than you wish to visualize or analyze at one time. First, let's create a HoloMap containing a number of observations of some noisy data.\n\n\n```python\nobs_hmap = hv.HoloMap({i: hv.Image(np.random.randn(10, 10), bounds=extents)\n for i in range(3)}, kdims='Observation')\n```\n\nA `HoloMap` may not be sampled directly, instead we can use the `.apply` method to sample each element in the HoloMap and consequently use the `.collapse` method to produce a single `Dataset`. In this case we'll take 3x3 subsamples of each of the Images:\n\n\n```python\nhv.output(backend='matplotlib', size=120)\n\nsample_style = dict(edgecolors='k', alpha=1)\nall_samples = obs_hmap.collapse().to.scatter3d().opts(alpha=0.15, xticks=4)\nsampled = obs_hmap.apply.sample((3,3)).collapse()\nsubsamples = sampled.to.scatter3d().opts(**sample_style)\nall_samples * subsamples + hv.Table(sampled)\n```\n\nBy supplying bounds in as a (left, bottom, right, top) tuple we can also sample a subregion of our images:\n\n\n```python\nsampled = obs_hmap.apply.sample((3,3), bounds=(2,5,5,10)).collapse()\nsubsamples = sampled.to.scatter3d().opts(xticks=4, **sample_style)\nall_samples * subsamples + hv.Table(sampled)\n```\n\nSince this kind of sampling is only well supported for continuous coordinate systems, we can only apply this kind of sampling to Image types for now.", "start_char_idx": 2, "end_char_idx": 1406, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fa317e36-a812-470b-95bd-4c4594759838": {"__data__": {"id_": "fa317e36-a812-470b-95bd-4c4594759838", "embedding": null, "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "12074480-b400-42d2-9b56-f2ce4b92d41f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b591b74b377aa5651980bce9debed337a1dd8082ab0a2794272f9380fe78cd56", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "242b2d69-ebad-4db9-83c9-4332f5e3f3ce", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1d31fdf2ba4b22413e8915347e95735d65986430e8ca41d63f34c4a3b415a892", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cfa32fdb-5bc0-4360-abbc-d5b3df9cde8d", "node_type": "1", "metadata": {}, "hash": "f3262c059d0e122e9e24fe84f8620e3018a8bd72bd7ed806563f3c020484af45", "class_name": "RelatedNodeInfo"}}, "hash": "b6ef5dd1943f8d95ee6385a6b39ab7b100ccdb8ddc3e3b85767b3f8b3c0f757d", "text": "Sampling Charts\n\nSampling Chart-type Elements like Curve, Scatter, Histogram is only supported by providing an explicit list of samples, since those Elements have no underlying regular grid.\n\n\n```python\nhv.output(backend='bokeh')\n\nxs = np.arange(10)\nextents = (0, 0, 2, 10)\ncurve = hv.HoloMap({(i) : hv.Curve(zip(xs, np.sin(xs)*i))\n for i in np.linspace(0.5, 1.5, 3)},\n kdims='Observation')\nall_samples = curve.collapse().to.points()\nsampled = curve.apply.sample([0, 2, 4, 6, 8]).collapse()\nsample_points = sampled.to.points(extents=extents)\nsampling = all_samples * sample_points.opts(color='red')\nsampling + hv.Table(sampled)\n```\n\nThese tools should help you index, slice, sample, and select your data with ease. The Tabular Data guide explains how to do other types of operations, such as averaging and other reduction operations.", "start_char_idx": 2, "end_char_idx": 873, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cfa32fdb-5bc0-4360-abbc-d5b3df9cde8d": {"__data__": {"id_": "cfa32fdb-5bc0-4360-abbc-d5b3df9cde8d", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ba4d0f4e-e3d7-4476-a795-37cc7604d458", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5b72c2661539e521cee1a9c22f418639a61220d7f93b58fee6e851cd95298937", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fa317e36-a812-470b-95bd-4c4594759838", "node_type": "1", "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b6ef5dd1943f8d95ee6385a6b39ab7b100ccdb8ddc3e3b85767b3f8b3c0f757d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "85af42d2-79d1-484d-9f25-4b75bd0f421a", "node_type": "1", "metadata": {}, "hash": "f5372234235dc24c40b6a332d2d634eb08f6ec9f65a6bae1125e071961c6a1a6", "class_name": "RelatedNodeInfo"}}, "hash": "f3262c059d0e122e9e24fe84f8620e3018a8bd72bd7ed806563f3c020484af45", "text": "Applying Transformations\n\n\n```python\nimport param\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('bokeh', 'matplotlib')\n```\n\nHoloViews objects provide a convenient way of wrapping your data along with some metadata for exploration and visualization. For the simplest visualizations, you can simply declare a small collection of elements which can then be composed or placed in an appropriate container. As soon as the task becomes more complex, it is natural to write functions that output HoloViews objects.\n\nIn this user guide, we will introduce to related concepts to express transforms of some data, first we will cover `dim` transforms to express simple transforms of some data and then ``Operation`` classes to express more complex transformations. Operations provide a consistent structure for such code, making it possible to write general functions that can process HoloViews objects. This enables powerful new ways of specifying HoloViews objects computed from existing data, allowing the construction of flexible data processing pipelines. Examples of such operations are ``histogram``, ``rolling``, ``datashade`` or ``decimate``, which apply some computation on certain types of Element and return a new Element with the transformed data.\n\nIn this user guide we will discover how transforms and operations work, how to control their parameters and how to chain them. The Data Processing Pipelines guide extends what we will have learned to demonstrate how operations can be applied lazily by using the ``dynamic`` flag, letting us define deferred processing pipelines that can drive highly complex visualizations and dashboards.", "start_char_idx": 2, "end_char_idx": 1678, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "85af42d2-79d1-484d-9f25-4b75bd0f421a": {"__data__": {"id_": "85af42d2-79d1-484d-9f25-4b75bd0f421a", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0e9b7caa-8be3-4887-ba8c-feb0b3a6d665", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "44fc880a2c436f77eb159d658eeed61b0d980c11bb2d2e76f674fb759624e3b9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cfa32fdb-5bc0-4360-abbc-d5b3df9cde8d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f3262c059d0e122e9e24fe84f8620e3018a8bd72bd7ed806563f3c020484af45", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d378bfe4-5984-487a-af16-7f99e95c29a5", "node_type": "1", "metadata": {}, "hash": "0b9dd3780902b6257d0e5e96f243697c18b596e06cce92f6eb1e30f15fc63c7c", "class_name": "RelatedNodeInfo"}}, "hash": "f5372234235dc24c40b6a332d2d634eb08f6ec9f65a6bae1125e071961c6a1a6", "text": "Transforms\n\nA transform is expressed using a `dim` expression, which we originally introduced in the context of the Style Mapping user guide. It allows expressing some deferred computation on a HoloViews Element. This can be a powerful way to transform some \ndata quickly and easily. Let us start by declaring a `Dataset` with a single dimension `x`:\n\n\n```python\nds = hv.Dataset(np.linspace(0, np.pi), 'x')\nds\n```\n\nThe `Dataset` x values consist of an array of monotonically increasing values from 0 to np.pi. We can now define a transform which takes these values and transform them:\n\n\n```python\nexpr = np.sin(hv.dim('x')*10+5)\nexpr\n```\n\nThis expression takes these values multiplies them by 10, adds 5 and then calculates the `sine`. Using the `.transform` method we can now apply this expression to the `Dataset` and assign the values to a newly created `y` dimension by supplying it as a keyword (in the same way we could override the `x` dimension):\n\n\n```python\ntransformed = ds.transform(y=expr)\ntransformed\n```\n\nWe can see the result of this by casting it to a `Curve`:\n\n\n```python\nhv.Curve(transformed)\n```\n\nThis allows almost any mathematical transformation to be expressed and applied on a `Dataset` in a deferred way. The regular `dim` expression supports all the standard mathematical operators and NumPy array methods. However if we want to use methods which exist only on specific datatypes we can invoke them using `.df` or `.xr`, which let you make (pandas) dataframe and xarray API (method and accessor) calls respectively. Let us for example load an XArray Dataset, which has a number of custom methods to perform complex computations on the data, e.g. the quantile method:\n\n\n```python\nimport xarray as xr\n\nair_temp = xr.tutorial.load_dataset('air_temperature')\nprint(air_temp.quantile.__doc__)\n```\n\nWe can construct an expression to apply this method on the data and compute the 95th percentile of air temperatures along the 'time' dimension:\n\n\n```python\nquantile_expr = hv.dim('air').xr.quantile(0.95, dim='time')\nquantile_expr\n```\n\nNow we can apply this to the `Dataset` using the `transform` method, in the resulting dataset we can see that the time dimension has been dropped:\n\n\n```python\ntemp_ds = hv.Dataset(air_temp, ['lon', 'lat', 'time'])\n\ntransformed_ds = temp_ds.transform(air=quantile_expr)\n\ntransformed_ds\n```\n\nTo visualize this data we will cast it to an `Image`:\n\n\n```python\nhv.Image(transformed_ds)\n```\n\nThe real power of `dim` transforms comes in when combining them with parameters. We will look at this in more detail later as part of the Pipeline user guide but let's quickly see what this looks like. We will create a Panel slider to control the `q` value in the call to the `quantile` method:\n\n\n```python\nimport panel as pn\n\nq = pn.widgets.FloatSlider(name='quantile')\n\nquantile_expr = hv.dim('air').xr.quantile(q, dim='time')\nquantile_expr\n```\n\nNow that we have expressed this dynamic `dim` transform let us apply it using `.apply.transform`:\n\n\n```python\ntemp_ds = hv.Dataset(air_temp, ['lon', 'lat'])\ntransformed = temp_ds.apply.transform(air=quantile_expr).apply(hv.Image)\n\npn.Column(q, transformed.opts(colorbar=True, width=400))\n```\n\n`dim` expressions provide a very powerful way to apply transforms on your data either statically or controlled by some external parameter, e.g. one driven by a Panel widget.", "start_char_idx": 2, "end_char_idx": 3356, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d378bfe4-5984-487a-af16-7f99e95c29a5": {"__data__": {"id_": "d378bfe4-5984-487a-af16-7f99e95c29a5", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2bfc3d48-83d4-4752-94f4-8bd3881c7439", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6dee113bba4e23f6a7100e3e9edcb5f67da657b13ede1047dd71ff28d75bbcc8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "85af42d2-79d1-484d-9f25-4b75bd0f421a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f5372234235dc24c40b6a332d2d634eb08f6ec9f65a6bae1125e071961c6a1a6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "64fd54be-1871-4f2a-a7ad-e83b0ca44d02", "node_type": "1", "metadata": {}, "hash": "2c94f98765888907f3da8bca4cfd2183562b5da3cbf220745fb1c103987ef1a3", "class_name": "RelatedNodeInfo"}}, "hash": "0b9dd3780902b6257d0e5e96f243697c18b596e06cce92f6eb1e30f15fc63c7c", "text": "Operations are parameterized\n\nIn cases a simple transform is not sufficient or you want to encapsulate some transformation in a more rigorous way an `Operation` allows encapsulating the parameters of a transform on a function-like object. Operations in HoloViews are subclasses of ``Operation``, which transform one Element or ``Overlay`` of Elements by returning a new Element that may be a transformation of the original. All operations are parameterized using the param library which allows easy validation and documentation of the operation arguments. In particular, operations are instances of ``param.ParameterizedFunction`` which allows operations to be used in the same way as normal python functions.\n\nThis approach has several advantages, one of which is that we can manipulate the parameters of operations at several different levels: at the class-level, at the instance-level or when it is called. Another advantage is that using parameterizing operations allows them to be inspected just like any other HoloViews object using ``hv.help``. We will now do this for the ``histogram`` operation:\n\n\n```python\nfrom holoviews.operation import histogram\nhv.help(histogram)\n```", "start_char_idx": 2, "end_char_idx": 1183, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "64fd54be-1871-4f2a-a7ad-e83b0ca44d02": {"__data__": {"id_": "64fd54be-1871-4f2a-a7ad-e83b0ca44d02", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "501451b7-5d19-4b29-8f0c-6b4c20eb8593", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e6b33368cf4f5a0d130b507a7c2bffe7761c12780985f0be712ccfb6cac518c5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d378bfe4-5984-487a-af16-7f99e95c29a5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0b9dd3780902b6257d0e5e96f243697c18b596e06cce92f6eb1e30f15fc63c7c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6e56c5ed-f689-4e9e-9d59-ae06d5cb28c6", "node_type": "1", "metadata": {}, "hash": "fa5a8c4bb7ebdd27d7244296b7f378d687f9e9a8dd7699a7c2401a90f2b975b3", "class_name": "RelatedNodeInfo"}}, "hash": "2c94f98765888907f3da8bca4cfd2183562b5da3cbf220745fb1c103987ef1a3", "text": "Applying operations\n\nAbove we can see a listing of all the parameters of the operation, with the defaults, the expected types and detailed docstrings for each one. The ``histogram`` operation can be applied to any Element and will by default generate a histogram for the first value dimension defined on the object it is applied to. As a simple example we can create an ``BoxWhisker`` Element containing samples from a normal distribution, and then apply the ``histogram`` operation to those samples in two ways: 1) by creating an instance on which we will change the ``num_bins`` and 2) by passing ``bin_range`` directly when calling the operation:\n\n\n```python\nboxw = hv.BoxWhisker(np.random.randn(10000))\nhistop_instance = histogram.instance(num_bins=50)\n\nboxw + histop_instance(boxw).relabel('num_bins=50') + histogram(boxw, bin_range=(0, 3)).relabel('bin_range=(0, 3)')\n```\n\nWe can see that these two ways of using operations gives us convenient control over how the parameters are applied. An instance allows us to persist some defaults which will be used in all subsequent calls, while passing keyword arguments to the operations applies the parameters for just that particular call.\n\nThe third way to manipulate parameters is to set them at the class level. If we always want to use ``num_bins=30`` instead of the default of ``num_bins=20`` shown in the help output above, we can simply set ``histogram.num_bins=30``.", "start_char_idx": 2, "end_char_idx": 1426, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6e56c5ed-f689-4e9e-9d59-ae06d5cb28c6": {"__data__": {"id_": "6e56c5ed-f689-4e9e-9d59-ae06d5cb28c6", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "48d6c511-65da-43f0-a9dd-ea3c450ce041", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1f1612bba49f35eabf0394cd1525725a596a5e1cd045c7db894ac8133c8ad74d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "64fd54be-1871-4f2a-a7ad-e83b0ca44d02", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2c94f98765888907f3da8bca4cfd2183562b5da3cbf220745fb1c103987ef1a3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f82f447d-abfa-4971-8162-94a11435575a", "node_type": "1", "metadata": {}, "hash": "8670949fe54c6d421799c999ea5e84710f85d6a3a153ee680c30701a0d17ec98", "class_name": "RelatedNodeInfo"}}, "hash": "fa5a8c4bb7ebdd27d7244296b7f378d687f9e9a8dd7699a7c2401a90f2b975b3", "text": "Operations on containers\n\n``Operations`` in HoloViews are applied to individual elements, which means that when you apply an operation to a container object (such as ``NdLayout``, ``GridSpace`` and ``HoloMap``) the operation is applied once per element. For an operation to work, all the elements must be of the same type which means the operation effectively acts to map the operation over all the contained elements. As a simple example we can define a HoloMap of ``BoxWhisker`` Elements by varying the width of the distribution via the ``Sigma`` value and then apply the histogram operation to it:\n\n\n```python\nholomap = hv.HoloMap({(i*0.1+0.1): hv.BoxWhisker(np.random.randn(10000)*(i*0.1+0.1)) for i in range(5)},\n kdims='Sigma')\nholomap + histogram(holomap)\n```\n\nAs you can see the operation has generated a ``Histogram`` for each value of ``Sigma`` in the ``HoloMap``. In this way we can apply the operation to the entire parameter space defined by a ``HoloMap``, ``GridSpace``, and ``NdLayout``.", "start_char_idx": 2, "end_char_idx": 1024, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f82f447d-abfa-4971-8162-94a11435575a": {"__data__": {"id_": "f82f447d-abfa-4971-8162-94a11435575a", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1ade6589-10be-4a3a-b3e8-c4bba274101d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "03e8d9113ab9fb500f7d6a8dbc91cd2590c92c116ef813aa5fa8909d53d9b37d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6e56c5ed-f689-4e9e-9d59-ae06d5cb28c6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fa5a8c4bb7ebdd27d7244296b7f378d687f9e9a8dd7699a7c2401a90f2b975b3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7c78b9a7-9957-489e-90de-1eed2e1164bc", "node_type": "1", "metadata": {}, "hash": "fe80a18bdaa0dc9b16f89d919912c9e75014189662de97363ed6b670986c67ee", "class_name": "RelatedNodeInfo"}}, "hash": "8670949fe54c6d421799c999ea5e84710f85d6a3a153ee680c30701a0d17ec98", "text": "Combining operations\n\nSince operations take a HoloViews object as input and return another HoloViews object we can very easily chain and combine multiple operations to perform complex analyses quickly and easily, while instantly visualizing the output.\n\nIn this example we'll work with operations on timeseries. We first define a small function to generate a random, noisy timeseries:\n\n\n```python\nfrom holoviews.operation import timeseries\n\ndef time_series(T = 1, N = 100, mu = 0.1, sigma = 0.1, S0 = 20): \n \"\"\"Parameterized noisy time series\"\"\"\n dt = float(T)/N\n t = np.linspace(0, T, N)\n W = np.random.standard_normal(size = N) \n W = np.cumsum(W)*np.sqrt(dt) # standard brownian motion\n X = (mu-0.5*sigma**2)*t + sigma*W \n S = S0*np.exp(X) # geometric brownian motion\n return S\n\ncurve = hv.Curve(time_series(N=1000)).opts(width=600)\n```\n\nNow we will start applying some operations to this data. HoloViews ships with two ready-to-use timeseries operations: the ``rolling`` operation, which applies a function over a rolling window, and a ``rolling_outlier_std`` operation that computes outlier points in a timeseries by excluding points less than ``sigma`` standard deviation removed from the rolling mean:\n\n\n```python\nsmoothed = curve * timeseries.rolling(curve) * timeseries.rolling_outlier_std(curve)\nsmoothed.opts(opts.Scatter(color='black'))\n```\n\nIn the next section we will define a custom operation that will compose with the ``smoothed`` operation output above to form a short operation pipeline.", "start_char_idx": 2, "end_char_idx": 1556, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7c78b9a7-9957-489e-90de-1eed2e1164bc": {"__data__": {"id_": "7c78b9a7-9957-489e-90de-1eed2e1164bc", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "58555620-2c7a-4d0e-95ad-e8d46735fd6d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "70c0c659553d51471c380ff4b96789bfeb87a04c201705f81cdc54243b77a1e3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f82f447d-abfa-4971-8162-94a11435575a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8670949fe54c6d421799c999ea5e84710f85d6a3a153ee680c30701a0d17ec98", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c10adae8-2e37-4207-b2b4-ab9e949c2a9f", "node_type": "1", "metadata": {}, "hash": "89a0122ac4a13985968bbafc6d5d8a40db1af90b112608ae9abe92e6eaaa1885", "class_name": "RelatedNodeInfo"}}, "hash": "fe80a18bdaa0dc9b16f89d919912c9e75014189662de97363ed6b670986c67ee", "text": "Defining custom operations\n\nWe can now define our own custom ``Operation`` which as you may recall can process either elements and overlays. This means we can define a simple operation that takes our ``smoothed`` overlay and computes the difference between the raw and smoothed curves that it contains. Such a subtraction will give us the residual between the smoothed and unsmoothed ``Curve`` elements, removing long-term trends and leaving the short-term variation.\n\nDefining an operation is very simple. An ``Operation`` subclass should define a ``_process`` method, which simply accepts an ``element`` argument. Optionally we can also define parameters on the operation, which we can access using the ``self.p`` attribute on the operation. In this case we define a ``String`` parameter, which specifies the name of the subtracted value dimension on the returned Element.\n\n\n```python\nfrom holoviews.operation import Operation\n\nclass residual(Operation):\n \"\"\"\n Subtracts two curves from one another.\n \"\"\"\n \n label = param.String(default='Residual', doc=\"\"\"\n Defines the label of the returned Element.\"\"\")\n \n def _process(self, element, key=None):\n # Get first and second Element in overlay\n el1, el2 = element.get(0), element.get(1)\n \n # Get x-values and y-values of curves\n xvals = el1.dimension_values(0)\n yvals = el1.dimension_values(1)\n yvals2 = el2.dimension_values(1)\n \n # Return new Element with subtracted y-values\n # and new label\n return el1.clone((xvals, yvals-yvals2),\n vdims=self.p.label)\n```\n\nHaving defined the residual operation let's try it out right away by applying it to our original and smoothed ``Curve``. We'll place the two objects on top of each other so they can share an x-axis and we can compare them directly:\n\n\n```python\n(smoothed + residual(smoothed).opts(xaxis=None)).cols(1)\n```\n\nIn this view we can immediately see that only a very small residual is left when applying this level of smoothing. However we have only tried one particular ``rolling_window`` value, the default value of ``10``. To assess how this parameter affects the residual we can evaluate the operation over a number different parameter settings, as we will see in the next section.", "start_char_idx": 2, "end_char_idx": 2319, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c10adae8-2e37-4207-b2b4-ab9e949c2a9f": {"__data__": {"id_": "c10adae8-2e37-4207-b2b4-ab9e949c2a9f", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "aa9bf5e0-05c5-4055-95d9-742ece533aaf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "68fc1beab0dc73f8bbf83c6165967804afa24400ad119bd6f110c4c04cc67846", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7c78b9a7-9957-489e-90de-1eed2e1164bc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fe80a18bdaa0dc9b16f89d919912c9e75014189662de97363ed6b670986c67ee", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c093751f-6253-4a61-8b39-deaea5f11465", "node_type": "1", "metadata": {}, "hash": "47c12eb33c5409466fa98ba4b223335ba0305f0603a54c6bbd3d5b8c8bb5073c", "class_name": "RelatedNodeInfo"}}, "hash": "89a0122ac4a13985968bbafc6d5d8a40db1af90b112608ae9abe92e6eaaa1885", "text": "Evaluating operation parameters\n\nWhen applying an operation there are often parameters to vary. Using traditional plotting approaches it's often difficult to evaluate them interactively to get a detailed understanding of what they do. Here we will apply the ``rolling`` operations with varying ``rolling_window`` widths and ``window_type``s across a ``HoloMap``:\n\n\n```python\nrolled = hv.HoloMap({(w, str(wt)): timeseries.rolling(curve, rolling_window=w, window_type=wt)\n for w in [10, 25, 50, 100, 200] for wt in [None, 'hamming', 'triang']},\n kdims=['Window', 'Window Type'])\nrolled\n```\n\nThis visualization is already useful since we can compare the effect of various parameter values by moving the slider and trying different window options. However since we can also chain operations we can easily compute the residual and view the two together. \n\nTo do this we simply overlay the ``HoloMap`` of smoothed curves on top of the original curve and pass it to our new ``residual`` function. Then we can combine the smoothed view with the original and see how the smoothing and residual curves vary across parameter values:\n\n\n```python\n(curve * rolled + residual(curve * rolled)).cols(1)\n```\n\nUsing a few additional lines we have now evaluated the operation over a number of different parameters values, allowing us to process the data with different smoothing parameters. In addition, by interacting with this visualization we can gain a better understanding of the operation parameters as well as gain insights into the structure of the underlying data.", "start_char_idx": 2, "end_char_idx": 1594, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c093751f-6253-4a61-8b39-deaea5f11465": {"__data__": {"id_": "c093751f-6253-4a61-8b39-deaea5f11465", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d8be5c6e-59eb-472a-bce6-d22faa2505bc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a8bba1f7d2fbf982cb2fe61fa22ccf01b4a43b832eb6d30ca38417d9c858556f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c10adae8-2e37-4207-b2b4-ab9e949c2a9f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "89a0122ac4a13985968bbafc6d5d8a40db1af90b112608ae9abe92e6eaaa1885", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7344e895-d677-40b0-b4d1-4b85f46d3b8e", "node_type": "1", "metadata": {}, "hash": "7453dd16bb43a37163dd8f7068c951992abb263436699fd3da55a2d3b8d6254e", "class_name": "RelatedNodeInfo"}}, "hash": "47c12eb33c5409466fa98ba4b223335ba0305f0603a54c6bbd3d5b8c8bb5073c", "text": "Operations on 2D elements\n\nLet's look at another example of operations in action, this time applying a simple filter to an `Image`. The basic idea is the same as above, although accessing the values to be transformed is a bit more complicated. First, we prepare an example image:\n\n\n```python\nhv.output(backend='matplotlib', size=200)\n\nfrom scipy.misc import ascent\n\nstairs_image = hv.Image(ascent()[200:500, :], bounds=[0, 0, ascent().shape[1], 300], label=\"stairs\")\nstairs_image\n```\n\nWe'll define a simple ``Operation``, which takes an ``Image`` and applies a high-pass or low-pass filter. We then use this to build a ``HoloMap`` of images filtered with different sigma values:\n\n\n```python\nfrom scipy import ndimage\n\nclass image_filter(hv.Operation):\n \n sigma = param.Number(default=5)\n \n type_ = param.String(default=\"low-pass\")\n\n def _process(self, element, key=None):\n xs = element.dimension_values(0, expanded=False)\n ys = element.dimension_values(1, expanded=False)\n \n # setting flat=False will preserve the matrix shape\n data = element.dimension_values(2, flat=False)\n \n if self.p.type_ == \"high-pass\":\n new_data = data - ndimage.gaussian_filter(data, self.p.sigma)\n else:\n new_data = ndimage.gaussian_filter(data, self.p.sigma)\n \n label = element.label + \" ({} filtered)\".format(self.p.type_)\n # make an exact copy of the element with all settings, just with different data and label:\n element = element.clone((xs, ys, new_data), label=label)\n return element\n\nstairs_map = hv.HoloMap({sigma: image_filter(stairs_image, sigma=sigma)\n for sigma in range(0, 12, 1)}, kdims=\"sigma\")\n\nstairs_map.opts(framewise=True)\n```\n\nJust as in the previous example, it is quite straight-forward to build a HoloMap containing results for different parameter values. Inside the ``_process()`` method, the given parameters can be accessed as ``self.p.`` (note that ``self.`` always contains the default value!). Since we did not specify the ``type_`` parameter, it defaulted to \"low-pass\".\n\nThere are some peculiarities when applying operations to two-dimensional elements:\n\n- Understanding the ``dimension_values()`` method: In principle, one could use ``element.data`` to access the element's data, however, since HoloViews can wrap a wide range of data formats, ``dimension_values()`` provides an API that lets you access the data without having to worry about the type of the data. The first parameter specifies the dimension to be returned. On a 2D element like an Image or Raster the first two dimensions reference the key dimensions, so passing an index of 0 or 1 will return the x- and y-axis values respectively. Any subsequent dimensions will be value dimensions, e.g. on an Image index value 2 will refer to the intensity values and on an RGB index values 2, 3, and 4 will return the Red, Green and Blue intensities instead. Setting ``expanded=False`` yields only the axis, while the default setting ``expanded=True`` returns a value for every pixel. Specifying ``flat=False`` means that the data's matrix shape will be preserved, which is what we need for this kind of filter.\n- ``Image`` and related classes come with convenient methods to convert between matrix indices and data coordinates and vice versa: ``matrix2sheet()`` and ``sheet2matrix()``. This is useful when searching for features such as peaks.\n\nA very powerful aspect of operations is the fact that they understand Holoviews data structures. This means it is very straight-forward to apply an operation to every element in a container. As an example, let's apply an additional high-pass filter to our HoloMap:\n\n\n```python\nimage_filter(stairs_map, type_=\"high-pass\").opts(framewise=True)\n```\n\nNote, that the sigma value for the high-pass filter has defaulted to 5, and the sigma value in the HoloMap still corresponds to the original low-pass filter.", "start_char_idx": 2, "end_char_idx": 3970, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7344e895-d677-40b0-b4d1-4b85f46d3b8e": {"__data__": {"id_": "7344e895-d677-40b0-b4d1-4b85f46d3b8e", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "89184dac-c148-4671-bf68-98842ad11dbd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7ce72d1459a4d83e69b2209444e63d30a9fc91b4191a7a6f442eadb0510e46db", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c093751f-6253-4a61-8b39-deaea5f11465", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "47c12eb33c5409466fa98ba4b223335ba0305f0603a54c6bbd3d5b8c8bb5073c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4563b291-a089-44dc-871a-7c12e1c77dc0", "node_type": "1", "metadata": {}, "hash": "e04040a7d7dd5bdd918eb26e85da81fa856b9d906e7142f7e9be73cbffc6ce6e", "class_name": "RelatedNodeInfo"}}, "hash": "7453dd16bb43a37163dd8f7068c951992abb263436699fd3da55a2d3b8d6254e", "text": "Benefits of using ``Operation``\n\nNow that we have seen some operations in action we can get some appreciation of what makes them useful. When working with data interactively we often end up applying a lot of ad-hoc data transforms, which provides maximum flexibility but is neither reproducible nor maintainable. Operations allow us to encapsulate analysis code using a well defined interface that is well suited for building complex analysis pipelines:\n\n1. ``Operation`` parameters are well defined by declaring parameters on the class. These parameters can be easily documented and automatically carry out validation on the types and ranges of the inputs. These parameters are documented using ``hv.help``.\n\n2. Both inputs and outputs of an operation are instantly visualizable, because the data **is** the visualization. This means you're not constantly context switching between data processing and visualization --- visualization comes for free as you build your data processing pipeline.\n\n3. Operations understand HoloViews datastructures and can be immediately applied to any appropriate collection of elements, allowing you to evaluate the operation with permutations of parameter values. This flexibility makes it easy to assess the effect of operation parameters and their effect on your data.\n\n4. As we will discover in the Data processing pipelines guide, operations can be applied lazily to build up complex deferred data-processing pipelines, which can aid your data exploration and drive interactive visualizations and dashboards.", "start_char_idx": 2, "end_char_idx": 1547, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4563b291-a089-44dc-871a-7c12e1c77dc0": {"__data__": {"id_": "4563b291-a089-44dc-871a-7c12e1c77dc0", "embedding": null, "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7e048583-ed11-4d88-8e2b-30a22fb80bf3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4458b5d4b13f66a739f13c4150c622441f2c12d341c122fc12c266f786ca8201", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7344e895-d677-40b0-b4d1-4b85f46d3b8e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7453dd16bb43a37163dd8f7068c951992abb263436699fd3da55a2d3b8d6254e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "39654ea7-b350-4a30-bf8f-a2b38ce85b15", "node_type": "1", "metadata": {}, "hash": "a60fc7fdc986f95069547f611b932276f99f427b70f11ff9cf837d3ccf65ef99", "class_name": "RelatedNodeInfo"}}, "hash": "e04040a7d7dd5bdd918eb26e85da81fa856b9d906e7142f7e9be73cbffc6ce6e", "text": "Other types of operation\n\nAs we have seen ``Operation`` is defined at the level of processing HoloViews elements or overlays of elements. In some situations, you may want to compute a new HoloViews datastructure from a number of elements contained in a structure other than an overlay, such as a HoloMap or a Layout. \n\nOne such pattern is an operation that accepts and returns a ``HoloMap`` where each of the output element depends on all the data in the input ``HoloMap``. For situations such as these, subclassing ``Operation`` is not appropriate and we recommend defining your own function. These custom operation types won't automatically gain support for lazy pipelines as described in the Data processing pipelines guide and how these custom operations are pipelined is left as a design decision for the user. Note that as long as these functions return simple elements or containers, their output can be used by subclasses of ``Operation`` as normal. \n\nWhat we *do* recommend is that you subclass from ``param.ParameterizedFunction`` so that you can declare well-documented and validated parameters, add a description of your operation with a class level docstring and gain automatic documentation support via ``hv.help``.", "start_char_idx": 2, "end_char_idx": 1231, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "39654ea7-b350-4a30-bf8f-a2b38ce85b15": {"__data__": {"id_": "39654ea7-b350-4a30-bf8f-a2b38ce85b15", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "faf2afa8-b152-40bc-ba0b-007ad057a901", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "21055b8aead62129aac4e5a846a4388e4e629cfaf68939b05cbc6b82ad002fd9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4563b291-a089-44dc-871a-7c12e1c77dc0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e04040a7d7dd5bdd918eb26e85da81fa856b9d906e7142f7e9be73cbffc6ce6e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8b1a435c-43f9-4e5c-bb88-bb5f8de561f5", "node_type": "1", "metadata": {}, "hash": "0f0c6bf3ad55ccf2ecc5da9e04c5b973093c04b3c6725c6cb5dbdf3be872f72e", "class_name": "RelatedNodeInfo"}}, "hash": "a60fc7fdc986f95069547f611b932276f99f427b70f11ff9cf837d3ccf65ef99", "text": "Responding to Events\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('bokeh')\n```\n\nIn the Live Data guide we saw how ``DynamicMap`` allows us to explore high dimensional data using the widgets in the same style as ``HoloMaps``. Although suitable for unbounded exploration of large parameter spaces, the ``DynamicMaps`` described in that notebook support exactly the same mode of interaction as ``HoloMaps``. In particular, the key dimensions are used to specify a set of widgets that when manipulated apply the appropriate indexing to invoke the user-supplied callable.\n\nIn this user guide we will explore the HoloViews streams system that allows *any* sort of value to be supplied from *anywhere*. This system opens a huge set of new possible visualization types, including continuously updating plots that reflect live data as well as dynamic visualizations that can be interacted with directly, as described in the Custom Interactivity guide.\n\nTo use visualize and use a DynamicMap you need to be running a live Jupyter server.When viewing this user guide as part of the documentation DynamicMaps will be sampled with a limited number of states.\n\n\n```python", "start_char_idx": 2, "end_char_idx": 1209, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8b1a435c-43f9-4e5c-bb88-bb5f8de561f5": {"__data__": {"id_": "8b1a435c-43f9-4e5c-bb88-bb5f8de561f5", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "aad6b8e2-b5ab-4f58-983c-0f562a8bcfc0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bf15ddb0e21533c1f7857508432317e2f5dc3e2a7fa6ec501af759e10085ff8b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "39654ea7-b350-4a30-bf8f-a2b38ce85b15", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a60fc7fdc986f95069547f611b932276f99f427b70f11ff9cf837d3ccf65ef99", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ddd25ed3-9683-4f07-837e-ba602b42ca6d", "node_type": "1", "metadata": {}, "hash": "36002b8e6c797835353163dc9f4f7ff269aa4df3d04eb92efb8680afd8bed8ae", "class_name": "RelatedNodeInfo"}}, "hash": "0f0c6bf3ad55ccf2ecc5da9e04c5b973093c04b3c6725c6cb5dbdf3be872f72e", "text": "Styles and plot options used in this user guide\n\nopts.defaults(\n opts.Area(fill_color='cornsilk', line_width=2,\n line_color='black'),\n opts.Ellipse(bgcolor='white', color='black'),\n opts.HLine(color='red', line_width=2),\n opts.Image(cmap='viridis'),\n opts.Path(bgcolor='white', color='black', line_dash='dashdot',\n show_grid=False),\n opts.VLine(color='red', line_width=2))\n```", "start_char_idx": 2, "end_char_idx": 422, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ddd25ed3-9683-4f07-837e-ba602b42ca6d": {"__data__": {"id_": "ddd25ed3-9683-4f07-837e-ba602b42ca6d", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "795fd61d-af80-411d-879a-abb57dd81e71", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3f905edb3a96e7959e7f1970db6595940bb27f5b8447769b97027101eb98764b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8b1a435c-43f9-4e5c-bb88-bb5f8de561f5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0f0c6bf3ad55ccf2ecc5da9e04c5b973093c04b3c6725c6cb5dbdf3be872f72e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4bbab617-30c9-42a5-9097-487e1a6e74fb", "node_type": "1", "metadata": {}, "hash": "8b986261f522d60d8433f504b64ae92d65c843672201d928b00d121864620704", "class_name": "RelatedNodeInfo"}}, "hash": "36002b8e6c797835353163dc9f4f7ff269aa4df3d04eb92efb8680afd8bed8ae", "text": "A simple ``DynamicMap``\n\nBefore introducing streams, let us declare a simple ``DynamicMap`` of the sort discussed in the Live Data user guide. This example consists of a ``Curve`` element showing a Lissajous curve with ``VLine`` and ``HLine`` annotations to form a crosshair:\n\n\n```python\nlin = np.linspace(-np.pi,np.pi,300)\n\ndef lissajous(t, a=3, b=5, delta=np.pi/2.):\n return (np.sin(a * t + delta), np.sin(b * t))\n\ndef lissajous_crosshair(t, a=3, b=5, delta=np.pi/2):\n (x,y) = lissajous(t,a,b,delta)\n return hv.VLine(x) * hv.HLine(y)\n\ncrosshair = hv.DynamicMap(lissajous_crosshair, kdims='t').redim.range(t=(-3.,3.))\n\npath = hv.Path(lissajous(lin))\n\npath * crosshair\n```\n\nAs expected, the declared key dimension (``kdims``) has turned into a slider widget that lets us move the crosshair along the curve. Now let's see how to position the crosshair using streams.", "start_char_idx": 2, "end_char_idx": 876, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4bbab617-30c9-42a5-9097-487e1a6e74fb": {"__data__": {"id_": "4bbab617-30c9-42a5-9097-487e1a6e74fb", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ded80b12-92c4-4a5d-878c-b05f96d980cd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c02ce394649453aa9561247f4987ea92e8712240851294f57e527ddb86c94845", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ddd25ed3-9683-4f07-837e-ba602b42ca6d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "36002b8e6c797835353163dc9f4f7ff269aa4df3d04eb92efb8680afd8bed8ae", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f496a2eb-6b5e-410c-99d4-eedf04db5575", "node_type": "1", "metadata": {}, "hash": "e54e74649debfdc4e7a57cdcd9276528296895689892240596c8aa26b5d13b05", "class_name": "RelatedNodeInfo"}}, "hash": "8b986261f522d60d8433f504b64ae92d65c843672201d928b00d121864620704", "text": "Introducing streams\n\n\n\nThe core concept behind a stream is simple: it defines one or more parameters that can change over time that automatically refreshes code depending on those parameter values. \n\nLike all objects in HoloViews, these parameters are declared using param and streams are defined as a parameterized subclass of the ``holoviews.streams.Stream``. A more convenient way is to use the ``Stream.define`` classmethod:\n\n\n```python\nfrom holoviews.streams import Stream, param\nTime = Stream.define('Time', t=0.0)\n```\n\nThis results in a ``Time`` class with a numeric ``t`` parameter that defaults to zero. As this object is parameterized, we can use ``hv.help`` to view its parameters:\n\n\n```python\nhv.help(Time)\n```\n\nThis parameter is a ``param.Number`` as we supplied a float, if we had supplied an integer it would have been a ``param.Integer``. Notice that there is no docstring in the help output above but we can add one by explicitly defining the parameter as follows:\n\n\n```python\nTime = Stream.define('Time', t=param.Number(default=0.0, doc='A time parameter'))\nhv.help(Time)\n```\n\nNow we have defined this ``Time`` stream class, we can make of an instance of it and look at its parameters:\n\n\n```python\ntime_dflt = Time()\nprint('This Time instance has parameter t={t}'.format(t=time_dflt.t))\n```\n\nAs with all parameterized classes, we can choose to instantiate our parameters with suitable values instead of relying on defaults.\n\n\n```python\ntime = Time(t=np.pi/4)\nprint('This Time instance has parameter t={t}'.format(t=time.t))\n```\n\nFor more information on defining ``Stream`` classes this way, use ``hv.help(Stream.define)``.", "start_char_idx": 2, "end_char_idx": 1642, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f496a2eb-6b5e-410c-99d4-eedf04db5575": {"__data__": {"id_": "f496a2eb-6b5e-410c-99d4-eedf04db5575", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c142769f-bb82-4206-a3a4-1908c070f74c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dc56f33b54354a3122a882a99c053237a0d1b46c470f79abf97ebe8152dd0d83", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4bbab617-30c9-42a5-9097-487e1a6e74fb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8b986261f522d60d8433f504b64ae92d65c843672201d928b00d121864620704", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ff779f07-7b3d-453e-b941-eb946bdbfc73", "node_type": "1", "metadata": {}, "hash": "a0130b107c18b40ab9232c6caf9d74e3092b56fb849480dfd3d9a7cde4b22194", "class_name": "RelatedNodeInfo"}}, "hash": "e54e74649debfdc4e7a57cdcd9276528296895689892240596c8aa26b5d13b05", "text": "Simple streams example\n\nWe can now supply this streams object to a ``DynamicMap`` using the same ``lissajous_crosshair`` callback from above by adding it to the ``streams`` list:\n\n\n```python\ndmap = hv.DynamicMap(lissajous_crosshair, streams=[time])\npath * dmap + path * lissajous_crosshair(t=np.pi/4.)\n```\n\nImmediately we see that the crosshair position of the ``DynamicMap`` reflects the ``t`` parameter values we set on the ``Time`` stream. This means that the ``t`` parameter was supplied as the argument to the ``lissajous_curve`` callback. As we now have no key dimensions, there is no longer a widget for the ``t`` dimensions.\n\nAlthough we have what looks like a static plot, it is in fact dynamic and can be updated in place at any time. To see this, we can call the ``event`` method on our ``DynamicMap``:\n\n\n\n```python\ndmap.event(t=0.2)\n```\n\nRunning this cell will have updated the crosshair from its original position where $t=\\frac{\\pi}{4}$ to a new position where ``t=0.2``. Try running the cell above with different values of ``t`` and watch the plot update!\n\nThis ``event`` method is the recommended way of updating the stream parameters on a ``DynamicMap`` but if you have a handle on the relevant stream instance, you can also call the ``event`` method on that:\n\n\n```python\ntime.event(t=-0.2)\n```\n\nRunning the cell above also moves the crosshair to a new position. As there are no key dimensions, there is only a single valid (empty) key that can be accessed with ``dmap[()]`` or ``dmap.select()`` making ``event`` the only way to explore new parameters.\n\nWe will examine the ``event`` method and the machinery that powers streams in more detail later in the user guide after we have looked at more examples of how streams are used in practice.", "start_char_idx": 2, "end_char_idx": 1763, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ff779f07-7b3d-453e-b941-eb946bdbfc73": {"__data__": {"id_": "ff779f07-7b3d-453e-b941-eb946bdbfc73", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "45bea28a-d560-4a2d-b916-444cf707970a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7fa8a0cdd490be8a3e7e555a431ce8dab253440f5a41fae4348867bf3afaef1d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f496a2eb-6b5e-410c-99d4-eedf04db5575", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e54e74649debfdc4e7a57cdcd9276528296895689892240596c8aa26b5d13b05", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d84caa3a-69d8-48d8-bd61-66a725103d75", "node_type": "1", "metadata": {}, "hash": "233db2da20178f422b505e4e173d1711b43f005d4dd43dbe1c6049889ff74efb", "class_name": "RelatedNodeInfo"}}, "hash": "a0130b107c18b40ab9232c6caf9d74e3092b56fb849480dfd3d9a7cde4b22194", "text": "Working with multiple streams\n\nThe previous example showed a curve parameterized by a single dimension ``t``. Often you will have multiple stream parameters you would like to declare as follows:\n\n\n```python\nls = np.linspace(0, 10, 200)\nxx, yy = np.meshgrid(ls, ls)\n\nXY = Stream.define('XY',x=0.0,y=0.0)\n\ndef marker(x,y):\n return hv.VLine(x) * hv.HLine(y)\n\nimage = hv.Image(np.sin(xx)*np.cos(yy))\n\ndmap = hv.DynamicMap(marker, streams=[XY()])\n\nimage * dmap\n```\n\nYou can update both ``x`` and ``y`` by passing multiple keywords to the ``event`` method:\n\n\n```python\ndmap.event(x=-0.2, y=0.1)\n```\n\nNote that the definition above behaves the same as the following definition where we define separate ``X`` and ``Y`` stream classes:\n\n```python\nX = Stream.define('X',x=0.0)\nY = Stream.define('Y',y=0.0)\nhv.DynamicMap(marker, streams=[X(), Y()])\n```\n\nThe reason why you might want to list multiple streams instead of always defining a single stream containing all the required stream parameters will be made clear in the Custom Interactivity guide.", "start_char_idx": 2, "end_char_idx": 1045, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d84caa3a-69d8-48d8-bd61-66a725103d75": {"__data__": {"id_": "d84caa3a-69d8-48d8-bd61-66a725103d75", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "da519065-154d-46db-b57f-8c3609ed6810", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "57f470a15d33b8c466ff7298f3aaf39fd43360bc63001e4822d012fea9ee9d43", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ff779f07-7b3d-453e-b941-eb946bdbfc73", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a0130b107c18b40ab9232c6caf9d74e3092b56fb849480dfd3d9a7cde4b22194", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2ad531e9-c850-487b-abdd-a858fafbdb1d", "node_type": "1", "metadata": {}, "hash": "bfc30a8bfdefa9b426ea3eecac32275195b0618de202f0a9f569304d163301ec", "class_name": "RelatedNodeInfo"}}, "hash": "233db2da20178f422b505e4e173d1711b43f005d4dd43dbe1c6049889ff74efb", "text": "Using Parameterized classes as a stream\n\nCreating a custom ``Stream`` class is one easy way to declare parameters. However, there's no need to make a Stream if you have already expressed your domain knowledge on a ``Parameterized`` class. For instance, let's assume you have made a simple parameterized `BankAccount` class:\n\n\n\n```python\nclass BankAccount(param.Parameterized):\n balance = param.Number(default=0, doc=\"Bank balance in USD\")\n overdraft = param.Number(default=200, doc=\"Overdraft limit\")\n\naccount = BankAccount(name='Jane', balance=300)\n```\n\nYou can link parameter changes straight to DynamicMap callable parameters by passing a keyword:param dictionary to the `streams` argument (for HoloViews version >= 1.14.2):\n\n\n```python\nstreams = dict(total=account.param.balance, overdraft=account.param.overdraft, owner=account.param.name)\n\ndef table(owner, total, overdraft):\n return hv.Table([(owner, overdraft, total)], ['Owner', 'Overdraft ($)', 'Total ($)'])\n\nbank_dmap = hv.DynamicMap(table, streams=streams)\nbank_dmap.opts(height=100)\n```\n\nNow as you set the `balance` parameter on the `janes_account` instance, the DynamicMap above updates. Note that the dictionary specifies that the `balance` parameter is mapped to the `total` argument of the callable.\n\n\n```python\naccount.balance=65.4\naccount.overdraft=350\n```", "start_char_idx": 2, "end_char_idx": 1338, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2ad531e9-c850-487b-abdd-a858fafbdb1d": {"__data__": {"id_": "2ad531e9-c850-487b-abdd-a858fafbdb1d", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "50fa7e76-af6b-4fdc-bb32-9ed21fe55dee", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "428153d784f94c267fb672b5e695d8bab3625145181543753898945f140c3019", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d84caa3a-69d8-48d8-bd61-66a725103d75", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "233db2da20178f422b505e4e173d1711b43f005d4dd43dbe1c6049889ff74efb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dcc38ca1-d6ef-4655-99df-05484a6c9906", "node_type": "1", "metadata": {}, "hash": "644fcc6d5ecb57938a3690ca299f7137aa4319daea37bcb0f0181252205d01f6", "class_name": "RelatedNodeInfo"}}, "hash": "bfc30a8bfdefa9b426ea3eecac32275195b0618de202f0a9f569304d163301ec", "text": "Use with `panel`\n\nThis dictionary format is particularly useful when used with the Panel library (a dependency of HoloViews that should always be available), because `panel` widgets always reflect their values on the `value` parameter. This means that if you declare two Panel widgets as follows:\n\n\n```python\nimport panel as pn\n\nslider = pn.widgets.FloatSlider(start=0, end=500, name='Balance')\ncheckbox = pn.widgets.Select(options=['student','regular', 'savings'], name='Account Type')\npn.Row(slider, checkbox)\n```\n\nYou can map both widget values into a `DynamicMap` callback without having a name clash as follows:\n\n\n```python\noverdraft_limits = {'student':300, 'regular':100, 'savings':0} # Overdraft limits for different account types\nstreams = dict(owner=account.param.name, total=slider.param.value, acc=checkbox.param.value)\n\ndef account_info(owner, total, acc):\n return hv.Table([(owner, acc, overdraft_limits[acc], total)], \n ['Owner', 'Account Type', 'Overdraft ($)', 'Total ($)'])\n\nwidget_dmap = hv.DynamicMap(account_info, streams=streams)\nwidget_dmap.opts(height=100)\n```\n\n\nYou can now update the plot above using the slider and dropdown widgets. Note that for all these examples, a `Params` stream is created internally. This type of stream can wrap Parameterized objects or sets of Parameters but (since HoloViews 1.10.8) it is rare that an explicit stream object like that needs to be used directly at the user level. To see more examples of how to use Panel with HoloViews, see the Dashboards user guide.", "start_char_idx": 2, "end_char_idx": 1546, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dcc38ca1-d6ef-4655-99df-05484a6c9906": {"__data__": {"id_": "dcc38ca1-d6ef-4655-99df-05484a6c9906", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "35214eb7-8eed-4ac7-b8b2-737df1685244", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "67992b442140393d2f77fed983b3b16807e7ff684d83fb62a426fe230e9ed986", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2ad531e9-c850-487b-abdd-a858fafbdb1d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bfc30a8bfdefa9b426ea3eecac32275195b0618de202f0a9f569304d163301ec", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e5408e1f-986e-4abd-907a-ac9d683b6174", "node_type": "1", "metadata": {}, "hash": "ed9e6be78af2e1e4508457115020b04d9c46e3db6b9735241cf5c388a410f575", "class_name": "RelatedNodeInfo"}}, "hash": "644fcc6d5ecb57938a3690ca299f7137aa4319daea37bcb0f0181252205d01f6", "text": "Using `.apply.opts`\n\nYou can supplying Parameters in a similar manner to the `.apply.opts` method. In the following example, a `Style` class has Parameters that indicate the desired colorma and color levels for the `image` instance defined earlier. We can link these together as follows:\n\n\n```python\nclass Style(param.Parameterized):\n\n colormap = param.ObjectSelector(default='viridis', objects=['viridis', 'plasma', 'magma'])\n\n color_levels = param.Integer(default=255, bounds=(1, 255))\n\nstyle = Style()\nimage.apply.opts(colorbar=True, width=400, cmap=style.param.colormap, color_levels=style.param.color_levels)\n```\n\nUsing the `.apply` accessor in this automatically makes the resulting `DynamicMap` depend on the streams specified by the Parameters. Unlike a regular streams class, the plot will update whenever a Parameter on the instance or class changes. For instance, we can update the ``cmap`` and ``color_level`` parameters and watch the plot update in response:\n\n\n```python\nstyle.color_levels = 10\nstyle.colormap = 'plasma' # Note that this is mapped to the 'cmap' keyword in .apply.opts\n```", "start_char_idx": 2, "end_char_idx": 1109, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e5408e1f-986e-4abd-907a-ac9d683b6174": {"__data__": {"id_": "e5408e1f-986e-4abd-907a-ac9d683b6174", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "608f1986-8e83-4a8c-83b4-5550d4afd4d9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "35e32a10c4ff7c378636a6c56060d19e636ad63390cb34fdca22cc166e535e14", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dcc38ca1-d6ef-4655-99df-05484a6c9906", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "644fcc6d5ecb57938a3690ca299f7137aa4319daea37bcb0f0181252205d01f6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c91893ee-bc0d-49a0-96a1-aa5e16a9aa2c", "node_type": "1", "metadata": {}, "hash": "e98c5c2f803f45596cfca84ed6ce07355bd8d5c27a54f050c47add23f451e9cb", "class_name": "RelatedNodeInfo"}}, "hash": "ed9e6be78af2e1e4508457115020b04d9c46e3db6b9735241cf5c388a410f575", "text": "Combining streams and key dimensions\n\n\nAll the ``DynamicMap`` examples above can't be indexed with anything other than ``dmap[()]`` or ``dmap.select()`` as none of them had any key dimensions. This was to focus exclusively on the streams system at the start of the user guide and not because you can't combine key dimensions and streams:\n\n\n```python\nxs = np.linspace(-3, 3, 400)\n\ndef function(xs, time):\n \"Some time varying function\"\n return np.exp(np.sin(xs+np.pi/time))\n\ndef integral(limit, time):\n curve = hv.Curve((xs, function(xs, time)))[limit:]\n area = hv.Area ((xs, function(xs, time)))[:limit]\n summed = area.dimension_values('y').sum() * 0.015 # Numeric approximation\n return (area * curve * hv.VLine(limit) * hv.Text(limit + 0.5, 2.0, '%.2f' % summed))\n\nTime = Stream.define('Time', time=1.0)\ndmap = hv.DynamicMap(integral, kdims='limit', streams=[Time()]).redim.range(limit=(-3,2))\ndmap\n```\n\nIn this example, you can drag the slider to see a numeric approximation to the integral on the left side on the ``VLine``.\n\nAs ``'limit'`` is declared as a key dimension, it is given a normal HoloViews slider. As we have also defined a ``time`` stream, we can update the displayed curve for any time value:\n\n\n```python\ndmap.event(time=8)\n```\n\nWe now see how to control the ``time`` argument of the integral function by triggering an event with a new time value, and how to control the ``limit`` argument by moving a slider. Controlling ``limit`` with a slider this way is valid but also a little unintuitive: what if you could control ``limit`` just by hovering over the plot?\n\nIn the Custom Interactivity user guide, we will see how we can do exactly this by switching to the bokeh backend and using the linked streams system.", "start_char_idx": 2, "end_char_idx": 1753, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c91893ee-bc0d-49a0-96a1-aa5e16a9aa2c": {"__data__": {"id_": "c91893ee-bc0d-49a0-96a1-aa5e16a9aa2c", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fb8b67c6-88ff-4dde-b79c-580338f961df", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f12b4ef141bb389226c3f90f98780a71e2a0a618957fe9f7b1883e823d206391", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e5408e1f-986e-4abd-907a-ac9d683b6174", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ed9e6be78af2e1e4508457115020b04d9c46e3db6b9735241cf5c388a410f575", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6db6f5d0-40e3-42fc-bb82-8f2d09385f7b", "node_type": "1", "metadata": {}, "hash": "bf31e1ac6004706f074d9ec505ceaf0cdce5266da784b1b58a24e49e032f2877", "class_name": "RelatedNodeInfo"}}, "hash": "e98c5c2f803f45596cfca84ed6ce07355bd8d5c27a54f050c47add23f451e9cb", "text": "Matching names to arguments\n\nNote that in the example above, the key dimension names and the stream parameter names match the arguments to the callable. This *must* be true for stream parameters but this isn't a requirement for key dimensions: if you replace the word 'radius' with 'size' in the example above after ``XY`` is defined, the example still works. \n\nHere are the rules regarding the callback argument names:\n\n* If your key dimensions and stream parameters match the callable argument names, the definition is valid.\n* If your callable accepts mandatory positional arguments and their number matches the number of key dimensions, the names don't need to match and these arguments will be passed key dimensions values.\n\nAs stream parameters always need to match the argument names, there is a method to allow them to be easily renamed. Let's say you imported a stream class as shown in Custom_Interactivity or for this example, reuse the existing ``XY`` stream class. You can then use the ``rename`` method allowing the following definition:\n\n\n```python\ndef integral2(lim, t): \n 'Same as integral with different argument names'\n return integral(lim, t)\n\ndmap = hv.DynamicMap(integral2, kdims='limit', streams=[Time().rename(time='t')]).redim.range(limit=(-3.,3.))\ndmap\n```\n\nOccasionally, it is useful to suppress some of the stream parameters of a stream class, especially when using the *linked streams* described in Custom_Interactivity. To do this you can rename the stream parameter to ``None`` so that you no longer need to worry about it being passed as an argument to the callable. To re-enable a stream parameter, it is sufficient to either give the stream parameter its original string name or a new string name.", "start_char_idx": 2, "end_char_idx": 1740, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6db6f5d0-40e3-42fc-bb82-8f2d09385f7b": {"__data__": {"id_": "6db6f5d0-40e3-42fc-bb82-8f2d09385f7b", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cddc66bf-3755-4727-a02e-61aa52221b90", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "baa7c41d53f5aa9c8ee70f4a871e355913280771ae6f4c53701cb780fc760796", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c91893ee-bc0d-49a0-96a1-aa5e16a9aa2c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e98c5c2f803f45596cfca84ed6ce07355bd8d5c27a54f050c47add23f451e9cb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4d506c40-8d32-4f33-aa0f-cf207601dd4f", "node_type": "1", "metadata": {}, "hash": "a88a4658fa8d2b8b6a65ac4a8ca9d4baf933f126fb1a44151467a43c6b643e56", "class_name": "RelatedNodeInfo"}}, "hash": "bf31e1ac6004706f074d9ec505ceaf0cdce5266da784b1b58a24e49e032f2877", "text": "Overlapping stream and key dimensions\n\nIn the above example above, the stream parameters do not overlap with the declared key dimension. What happens if we add 'time' to the declared key dimensions?\n\n\n\n```python\ndmap=hv.DynamicMap(integral, kdims=['time','limit'], streams=[Time()]).redim.range(limit=(-3.,3.))\ndmap\n```\n\nFirst you might notice that the 'time' value is now shown in the title but that there is no corresponding time slider as its value is supplied by the stream.\n\nThe 'time' parameter is now an instance of what are called 'dimensioned streams' which re-enable indexing of these dimensions:\n\n\n```python\ndmap[1,0] + dmap.select(time=3,limit=1.5) + dmap[None,1.5]\n```\n\nIn **A**, we supply our own values for the 'time and 'limit' parameters. This doesn't change the values of the 'time' parameters on the stream itself but it does allow us to see what would happen when the time value is one. Note the use of ``None`` in **C** as a way of leaving an explicit value unspecified, allowing the current stream value to be used.\n\nThis is one good reason to use dimensioned streams - it restores access to convenient indexing and selecting operation as a way of exploring your visualizations. The other reason it is useful is that if you keep all your parameters dimensioned, it re-enables the ``DynamicMap`` cache described in the Live Data, allowing you to record your interaction with streams and allowing you to cast to ``HoloMap`` for export:\n\n\n```python\ndmap.reset() # Reset the cache, we don't want the values from the cell above", "start_char_idx": 2, "end_char_idx": 1547, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4d506c40-8d32-4f33-aa0f-cf207601dd4f": {"__data__": {"id_": "4d506c40-8d32-4f33-aa0f-cf207601dd4f", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "676ebbd5-7424-4d03-87a9-4b24e99a191b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "352acfb6abd363b45d6bd6a7884ea87523bd74c0cf98a351c4063e6bd4f35d97", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6db6f5d0-40e3-42fc-bb82-8f2d09385f7b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bf31e1ac6004706f074d9ec505ceaf0cdce5266da784b1b58a24e49e032f2877", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "67cd877b-ca57-4410-9cb0-a411524f5b04", "node_type": "1", "metadata": {}, "hash": "1962e5a3222e71a315d78c0c1978e691396be4a45f179d663bc8961bcfa7f681", "class_name": "RelatedNodeInfo"}}, "hash": "a88a4658fa8d2b8b6a65ac4a8ca9d4baf933f126fb1a44151467a43c6b643e56", "text": "TODO: redim the limit dimension to a default of 0\ndmap.event(time=1)\ndmap.event(time=1.5)\ndmap.event(time=2)\nhv.HoloMap(dmap)\n```\n\nOne use of this would be to have a simulator drive a visualization forward using ``event`` in a loop. You could then stop your simulation and retain the recent history of the output as long as the allowed ``DynamicMap`` cache.", "start_char_idx": 2, "end_char_idx": 359, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "67cd877b-ca57-4410-9cb0-a411524f5b04": {"__data__": {"id_": "67cd877b-ca57-4410-9cb0-a411524f5b04", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e9a75e81-75f0-4dc0-8c5e-aee639a1fcad", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c6ed9aa7dee59d9c4779e8e01e7ce7d1d8cac64234d35faebe642f065503fd97", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4d506c40-8d32-4f33-aa0f-cf207601dd4f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a88a4658fa8d2b8b6a65ac4a8ca9d4baf933f126fb1a44151467a43c6b643e56", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4dc564c7-2902-4e59-ae85-143f97e3ad46", "node_type": "1", "metadata": {}, "hash": "435d52961f2d72965b6a50e7b25b303ee07ba4cd50cf2d16ecf30564925c1169", "class_name": "RelatedNodeInfo"}}, "hash": "1962e5a3222e71a315d78c0c1978e691396be4a45f179d663bc8961bcfa7f681", "text": "Generators and argument-free callables\n\nIn addition to callables, Python supports generators that can be defined with the ``yield`` keyword. Calling a function that uses yield returns a generator iterator object that accepts no arguments but returns new values when iterated or when ``next()`` is applied to it.\n\nHoloViews supports Python generators for completeness and generator expressions can be a convenient way to define code inline instead of using lambda functions. As generators expressions don't accept arguments and can get 'exhausted' ***we recommend using callables with ``DynamicMap``*** - exposing the relevant arguments also exposes control over your visualization.\n\nUnlike generators, callables that have arguments allow you to re-visit portions of your parameter space instead of always being forced in one direction via calls to ``next()``. With this caveat in mind, here is an example of a generator and the corresponding generator iterator that returns a ``BoxWhisker`` element:\n\n\n```python\ndef sample_distributions(samples=10, tol=0.04):\n np.random.seed(42)\n while True:\n gauss1 = np.random.normal(size=samples)\n gauss2 = np.random.normal(size=samples)\n data = (['A']*samples + ['B']*samples, np.hstack([gauss1, gauss2]))\n yield hv.BoxWhisker(data, 'Group', 'Value')\n samples+=1\n \nsample_generator = sample_distributions()\n```\n\nThis returns two box whiskers representing samples from two Gaussian distributions of 10 samples. Iterating over this generator simply resamples from these distributions using an additional sample each time.\n\nAs with a callable, we can pass our generator iterator to ``DynamicMap``:\n\n\n```python\nhv.DynamicMap(sample_generator)\n```\n\nWithout using streams, we now have a problem as there is no way to trigger the generator to view the next distribution in the sequence. We can solve this by defining a stream with no parameters:\n\n\n```python\ndmap = hv.DynamicMap(sample_generator, streams=[Stream.define('Next')()])\ndmap\n```", "start_char_idx": 2, "end_char_idx": 2021, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4dc564c7-2902-4e59-ae85-143f97e3ad46": {"__data__": {"id_": "4dc564c7-2902-4e59-ae85-143f97e3ad46", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a68497c3-64c2-4778-91d1-44215e615185", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6557a4d7b300e93af0f671db074832f1a870a0ed5a7d62856d0e9de30136d702", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "67cd877b-ca57-4410-9cb0-a411524f5b04", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1962e5a3222e71a315d78c0c1978e691396be4a45f179d663bc8961bcfa7f681", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dc32cfeb-5248-41eb-b737-6879758eee2e", "node_type": "1", "metadata": {}, "hash": "72acd7bfad9c5ff0f4dcd7f426f370b7c169e80da4b5b3e222430ae75d3f2ad0", "class_name": "RelatedNodeInfo"}}, "hash": "435d52961f2d72965b6a50e7b25b303ee07ba4cd50cf2d16ecf30564925c1169", "text": "Stream event update loops\n\nNow we can simply use ``event()`` to drive the generator forward and update the plot, showing how the two Gaussian distributions converge as the number of samples increase.\n\n\n```python\nfor i in range(40):\n dmap.event()\n```\n\nNote that there is a better way to run loops that drive ``dmap.event()`` which supports a ``period`` (in seconds) between updates and a ``timeout`` argument (also in seconds):\n\n\n```python\ndmap.periodic(0.1, 1000, timeout=3)\n```\n\nIn this generator example, ``event`` does not require any arguments but you can set the ``param_fn`` argument to a callable that takes an iteration counter and returns a dictionary for setting the stream parameters. In addition you can use ``block=False`` to avoid blocking the notebook using a threaded loop. This can be very useful although it has two downsides 1. all running visualizations using non-blocking updates will be competing for computing resources 2. if you override a variable that the thread is actively using, there can be issues with maintaining consistent state in the notebook.\n\nGenerally, the ``periodic`` utility is recommended for all such event update loops and it will be used instead of explicit loops in the rest of the user guides involving streams.", "start_char_idx": 2, "end_char_idx": 1263, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dc32cfeb-5248-41eb-b737-6879758eee2e": {"__data__": {"id_": "dc32cfeb-5248-41eb-b737-6879758eee2e", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3e8565b2-c9b6-4f81-9fbe-3b02f82fc234", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1dd4467e26a968e6c4e57f8e886924d0068b1b8513b392e1cd42580747012ac2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4dc564c7-2902-4e59-ae85-143f97e3ad46", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "435d52961f2d72965b6a50e7b25b303ee07ba4cd50cf2d16ecf30564925c1169", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "efb95120-200c-4d31-a97d-0a6610870284", "node_type": "1", "metadata": {}, "hash": "1f0ea31815859779c1ab4e6dccbfc372d0211412bc592be67c4715b99db28863", "class_name": "RelatedNodeInfo"}}, "hash": "72acd7bfad9c5ff0f4dcd7f426f370b7c169e80da4b5b3e222430ae75d3f2ad0", "text": "Using ``next()``\n\nThe approach shown above of using an empty stream works in an exactly analogous fashion for callables that take no arguments. In both cases, the ``DynamicMap`` ``next()`` method is enabled:\n\n\n```python\nhv.HoloMap({i:next(dmap) for i in range(10)}, kdims='Iteration')\n```", "start_char_idx": 2, "end_char_idx": 290, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "efb95120-200c-4d31-a97d-0a6610870284": {"__data__": {"id_": "efb95120-200c-4d31-a97d-0a6610870284", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "585361d9-185f-4d53-ad7b-ad57c5802c85", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f7519cee2fac028d46b6b3bf8dc57b6edeee5ca4c559c8474e461b35490c8fc1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dc32cfeb-5248-41eb-b737-6879758eee2e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "72acd7bfad9c5ff0f4dcd7f426f370b7c169e80da4b5b3e222430ae75d3f2ad0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c230eac4-a7c1-4b3d-bdbf-e2aa8f28adea", "node_type": "1", "metadata": {}, "hash": "d560ca68d7d56cd95299239601c03720f3d31aac2ed96f0bb283dffa96f7af80", "class_name": "RelatedNodeInfo"}}, "hash": "1f0ea31815859779c1ab4e6dccbfc372d0211412bc592be67c4715b99db28863", "text": "Next steps\n\nThe streams system allows you to update plots in place making it possible to build live visualizations that update in response to incoming live data or any other type of event. As we have seen in this user guide, you can use streams together with key dimensions to add additional interactivity to your plots while retaining the familiar widgets.\n\nThis user guide used examples that work with either the matplotlib or bokeh backends. In the Custom Interactivity user guide, you will see how you can directly interact with dynamic visualizations when using the bokeh backend.", "start_char_idx": 2, "end_char_idx": 587, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c230eac4-a7c1-4b3d-bdbf-e2aa8f28adea": {"__data__": {"id_": "c230eac4-a7c1-4b3d-bdbf-e2aa8f28adea", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d615ceef-2f4b-4971-84f3-9aeb9c07b69d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a765693a53fe6a6efef9fa5538d3a374d318140bbaa26e7b127d2a5bb2f332e1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "efb95120-200c-4d31-a97d-0a6610870284", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1f0ea31815859779c1ab4e6dccbfc372d0211412bc592be67c4715b99db28863", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "74b33b46-b867-4165-a6ac-e7f0d3cfde05", "node_type": "1", "metadata": {}, "hash": "ccb80b573bc612d1798f6c532dc907204161f4678f3d018ebaeb7960f0f7f5ad", "class_name": "RelatedNodeInfo"}}, "hash": "d560ca68d7d56cd95299239601c03720f3d31aac2ed96f0bb283dffa96f7af80", "text": "[Advanced] How streams work\n\n\n\nThis optional section is not necessary for users who simply want to use the streams system, but it does describe how streams actually work in more detail.\n\nA stream class is one that inherits from ``Stream`` that typically defines some new parameters. We have already seen one convenient way of defining a stream class:\n\n\n```python\ndefineXY = Stream.define('defineXY', x=0.0, y=0.0)\n```\n\nThis is equivalent to the following definition which would be more appropriate in library code or for complex stream class requiring lots of parameters that need to be documented:\n\n\n```python\nclass XY(Stream):\n x = param.Number(default=0.0, constant=True, doc='An X position.')\n y = param.Number(default=0.0, constant=True, doc='A Y position.')\n```\n\nAs we have already seen, we can make an instance of ``XY`` with some initial values for ``x`` and ``y``.\n\n\n```python\nxy = XY(x=2,y=3)\n```\n\nHowever, trying to modify these parameters directly will result in an exception as they have been declared constant (e.g ``xy.x=4`` will throw an error). This is because there are two allowed ways of modifying these parameters, the simplest one being ``update``:\n\n\n```python\nxy.update(x=4,y=50)\nxy.rename(x='xpos', y='ypos').contents\n```\n\nThis shows how you can update the parameters and also shows the correct way to view the stream parameter values via the ``contents`` property as this will apply any necessary renaming.\n\nSo far, using ``update`` has done nothing but force us to access parameter a certain way. What makes streams work are the side-effects you can trigger when changing a value via the ``event`` method. The relevant side-effect is to invoke callables called 'subscribers'", "start_char_idx": 2, "end_char_idx": 1708, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "74b33b46-b867-4165-a6ac-e7f0d3cfde05": {"__data__": {"id_": "74b33b46-b867-4165-a6ac-e7f0d3cfde05", "embedding": null, "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "753fafbe-fe23-43fb-89c4-b28f937a2626", "node_type": "4", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c96460305ff19d424aae2618bde8032d694d3cd51ab40470e1cedfde583fb548", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c230eac4-a7c1-4b3d-bdbf-e2aa8f28adea", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d560ca68d7d56cd95299239601c03720f3d31aac2ed96f0bb283dffa96f7af80", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "58859ee9-b27d-435d-95ff-03de0553343b", "node_type": "1", "metadata": {}, "hash": "53f281b079a3ca434c966a5afcc152918b83f85bebb0ceccd60ce9ccdd41e37c", "class_name": "RelatedNodeInfo"}}, "hash": "ccb80b573bc612d1798f6c532dc907204161f4678f3d018ebaeb7960f0f7f5ad", "text": "Subscribers\n\nWithout defining any subscribes, the ``event`` method is identical to ``update``:\n\n\n```python\nxy = XY()\nxy.event(x=4,y=50)\nxy.contents\n```\n\nNow let's add a subscriber:\n\n\n```python\ndef subscriber(xpos,ypos):\n print('The subscriber received xpos={xpos} and ypos={ypos}'.format(xpos=xpos,ypos=ypos))\n\nxy = XY().rename(x='xpos', y='ypos')\nxy.add_subscriber(subscriber)\nxy.event(x=4,y=50)\n```\n\nAs we can see, now when you call ``event``, our subscriber is called with the updated parameter values, renamed as appropriate. The ``event`` method accepts the original parameter names and the subscriber receives the new values after any renaming is applied. You can add as many subscribers as you want and you can clear them using the ``clear`` method:\n\n\n```python\nxy.clear()\nxy.event(x=0,y=0)\n```\n\nWhen you define a ``DynamicMap`` using streams, the HoloViews plotting system installs the necessary callbacks as subscribers to update the plot when the stream parameters change. The above example clears all subscribers (it is equivalent to ``clear('all')``. To clear only the subscribers you define yourself use ``clear('user')`` and to clear any subscribers installed by the HoloViews plotting system use ``clear('internal')``.\n\nWhen using linked streams as described in the Custom Interactivity user guide, the plotting system recognizes the stream class and registers the necessary machinery with Bokeh to update the stream values based on direct interaction with the plot.", "start_char_idx": 2, "end_char_idx": 1486, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "58859ee9-b27d-435d-95ff-03de0553343b": {"__data__": {"id_": "58859ee9-b27d-435d-95ff-03de0553343b", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c58274f9-ba38-4a50-b6a1-68f288fb14e0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d1192130a7bad1e774f3ca063027822f7a42dd4ad568abe1eafc99fab6b6aa2b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "74b33b46-b867-4165-a6ac-e7f0d3cfde05", "node_type": "1", "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ccb80b573bc612d1798f6c532dc907204161f4678f3d018ebaeb7960f0f7f5ad", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4be166aa-d5ad-4d70-9716-9471e2547989", "node_type": "1", "metadata": {}, "hash": "447595ac557ed1f35cc07cceb9b0892dff42a1fa927e0444b8bd3352aa85e5b9", "class_name": "RelatedNodeInfo"}}, "hash": "53f281b079a3ca434c966a5afcc152918b83f85bebb0ceccd60ce9ccdd41e37c", "text": "Custom Interactivity\n\n\n```python\nimport param\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('bokeh', 'matplotlib')\n```\n\nIn previous notebooks we discovered how the ``DynamicMap`` class allows us to declare objects in a lazy way to enable exploratory analysis of large parameter spaces. In the Responding to Events guide we learned how to interactively push updates to existing plots by declaring Streams on a DynamicMap. In this user guide we will extend the idea to so called *linked* Streams, which allows complex interactions to be declared by specifying which events should be exposed when a plot is interacted with. By passing information about live interactions to a simple Python based callback, you will be able to build richer, even more interactive visualizations that enable seamless data exploration.\n\nSome of the possibilities this opens up include:\n\n* Dynamically aggregating datasets of billions of datapoints depending on the plot axis ranges using the datashader library.\n* Responding to ``Tap`` and ``DoubleTap`` events to reveal more information in subplots.\n* Computing statistics in response to selections applied with box- and lasso-select tools.\n\nCurrently only the bokeh backend for HoloViews supports the linked streams system but the principles used should extend to any backend that can define callbacks that fire when a user zooms or pans or interacts with a plot.\n\nTo use and visualize DynamicMap with linked Stream objects you need to be running a live Jupyter server.This user guide assumes that it will be run in a live notebook environment.\nWhen viewed statically, DynamicMaps on this page will only show the first available Element.", "start_char_idx": 2, "end_char_idx": 1705, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4be166aa-d5ad-4d70-9716-9471e2547989": {"__data__": {"id_": "4be166aa-d5ad-4d70-9716-9471e2547989", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "36cd84b9-a384-472d-83bd-a5009aecf5bf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8883049c40960dc98e0f31fd68810f45926da8f2ded7cd6b3482d425290d6035", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "58859ee9-b27d-435d-95ff-03de0553343b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "53f281b079a3ca434c966a5afcc152918b83f85bebb0ceccd60ce9ccdd41e37c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "588a16c0-2e88-4e67-91e5-c6a298ad91db", "node_type": "1", "metadata": {}, "hash": "bae5922c2683e2198cb9dcade4745a2d0eb9a8a32db311bd56ac847e28bdfd6c", "class_name": "RelatedNodeInfo"}}, "hash": "447595ac557ed1f35cc07cceb9b0892dff42a1fa927e0444b8bd3352aa85e5b9", "text": "Available Linked Streams\n\nThere are a huge number of ways one might want to interact with a plot. The HoloViews streams module aims to expose many of the most common interactions you might want want to employ, while also supporting extensibility via custom linked Streams. \n\nHere is the full list of linked Stream that are all descendants of the ``LinkedStream`` baseclass:\n\n\n```python\nfrom holoviews import streams\nlisting = ', '.join(sorted([str(s.name) for s in param.descendents(streams.LinkedStream)]))\nprint('The linked stream classes supported by HoloViews are:\\n\\n{listing}'.format(listing=listing))\n```\n\nAs you can see, most of these events are about specific interactions with a plot such as the current axis ranges (the ``RangeX``, ``RangeY`` and ``RangeXY`` streams), the mouse pointer position (the ``PointerX``, ``PointerY`` and ``PointerXY`` streams), click or tap positions (``Tap``, ``DoubleTap``). Additionally there a streams to access plotting selections made using box- and lasso-select tools (``Selection1D``), the plot size (``PlotSize``) and the ``Bounds`` of a selection. Finally there are a number of drawing/editing streams such as ``BoxEdit``, ``PointDraw``, ``FreehandDraw``, ``PolyDraw`` and ``PolyEdit``.\n\nEach of these linked Stream types has a corresponding backend specific ``Callback``, which defines which plot attributes or events to link the stream to and triggers events on the ``Stream`` in response to changes on the plot. Defining custom ``Stream`` and ``Callback`` types will be covered in future guides.", "start_char_idx": 2, "end_char_idx": 1549, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "588a16c0-2e88-4e67-91e5-c6a298ad91db": {"__data__": {"id_": "588a16c0-2e88-4e67-91e5-c6a298ad91db", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "77baf678-09a5-4f6d-907a-5d0289569396", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bef0bee13fc199a22803dc7c5b4082befe9ef8575abd31429fe0db8afb845f4e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4be166aa-d5ad-4d70-9716-9471e2547989", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "447595ac557ed1f35cc07cceb9b0892dff42a1fa927e0444b8bd3352aa85e5b9", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "79e07440-d7c7-4d70-8440-c57d388d50de", "node_type": "1", "metadata": {}, "hash": "439081e9c2a435bbc87af3da450f0d094f6ebd2c032372a794d2a79cdbd188ef", "class_name": "RelatedNodeInfo"}}, "hash": "bae5922c2683e2198cb9dcade4745a2d0eb9a8a32db311bd56ac847e28bdfd6c", "text": "Linking streams to plots\n\nAt the end of the Responding to Events guide we discovered that streams have ``subscribers``, which allow defining user defined callbacks on events, but also allow HoloViews to install subscribers that let plots respond to Stream updates. Linked streams add another concept on top of ``subscribers``, namely the Stream ``source``.\n\nThe source of a linked stream defines which plot element to receive events from. Any plot containing the ``source`` object will be attached to the corresponding linked stream and will send event values in response to the appropriate interactions.\n\nLet's start with a simple example. We will declare one of the linked Streams from above, the ``PointerXY`` stream. This stream sends the current mouse position in plot axes coordinates, which may be continuous or categorical. The first thing to note is that we haven't specified a ``source`` which means it uses the default value of ``None``.\n\n\n```python\npointer = streams.PointerXY()\nprint(pointer.source)\n```\n\nBefore continuing, we can check the stream parameters that are made available to user callbacks from a given stream instance by looking at its contents:\n\n\n```python\nprint('The %s stream has contents %r' % (pointer, pointer.contents))\n```", "start_char_idx": 2, "end_char_idx": 1257, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "79e07440-d7c7-4d70-8440-c57d388d50de": {"__data__": {"id_": "79e07440-d7c7-4d70-8440-c57d388d50de", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7f32b640-e9ef-426f-96de-6c53e287fab8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "00a4f0376009198ff9bf4bb36771e0ea9298018f9652bd72d36fadef9ac843d5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "588a16c0-2e88-4e67-91e5-c6a298ad91db", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bae5922c2683e2198cb9dcade4745a2d0eb9a8a32db311bd56ac847e28bdfd6c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f65b5e5f-092f-4d4b-b849-39b9a3758d02", "node_type": "1", "metadata": {}, "hash": "2b0d9b99880669eabcae6bbc1fb7f72df4f84096e9afd602acdce6aea152664e", "class_name": "RelatedNodeInfo"}}, "hash": "439081e9c2a435bbc87af3da450f0d094f6ebd2c032372a794d2a79cdbd188ef", "text": "Automatic linking\n\nA stream instance is automatically linked to the first ``DynamicMap`` we pass it to, which we can confirm by inspecting the stream's ``source`` attribute after supplying it to a ``DynamicMap``:\n\n\n```python\npointer_dmap = hv.DynamicMap(lambda x, y: hv.Points([(x, y)]), streams=[pointer])\nprint(pointer.source is pointer_dmap)\n```\n\nThe ``DynamicMap`` we defined above simply defines returns a ``Points`` object composed of a single point that marks the current ``x`` and ``y`` position supplied by our ``PointerXY`` stream. The stream is linked whenever this ``DynamicMap`` object is displayed as it is the stream source:\n\n\n```python\npointer_dmap.opts(size=10)\n```\n\nIf you hover over the plot canvas above you can see that the point tracks the current mouse position. We can also inspect the last cursor position by examining the stream contents:\n\n\n```python\npointer.contents\n```\n\nIn the Responding to Events user guide, we introduced an integration example that would work more intuitively with linked streams. Here it is again with the ``limit`` value controlled by the ``PointerX`` linked stream:\n\n\n```python\nxs = np.linspace(-3, 3, 400)\n\ndef function(xs, time):\n \"Some time varying function\"\n return np.exp(np.sin(xs+np.pi/time))\n\ndef integral(limit, time):\n limit = -3 if limit is None else np.clip(limit,-3,3)\n curve = hv.Curve((xs, function(xs, time)))[limit:]\n area = hv.Area ((xs, function(xs, time)))[:limit]\n summed = area.dimension_values('y').sum() * 0.015 # Numeric approximation\n return (area * curve * hv.VLine(limit) * hv.Text(limit + 0.8, 2.0, '%.2f' % summed))\n\nintegral_streams = [\n streams.Stream.define('Time', time=1.0)(),\n streams.PointerX().rename(x='limit')]\n\nintegral_dmap = hv.DynamicMap(integral, streams=integral_streams)\n\nintegral_dmap.opts(\n opts.Area(color='#fff8dc', line_width=2),\n opts.Curve(color='black'),\n opts.VLine(color='red'))\n```\n\nWe only needed to import and use the ``PointerX`` stream and rename the ``x`` parameter that tracks the cursor position to 'limit' so that it maps to the corresponding argument. Otherwise, the example only required bokeh specific style options to match the matplotlib example as closely as possible.", "start_char_idx": 2, "end_char_idx": 2232, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f65b5e5f-092f-4d4b-b849-39b9a3758d02": {"__data__": {"id_": "f65b5e5f-092f-4d4b-b849-39b9a3758d02", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b74c3f8f-e15b-4e1d-8cf0-c054c3c9e0cf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9ed64dbee8209484ca98ebf7c76f99970f65d6e8fb3ae69b8fc66adc21ca3dea", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "79e07440-d7c7-4d70-8440-c57d388d50de", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "439081e9c2a435bbc87af3da450f0d094f6ebd2c032372a794d2a79cdbd188ef", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1cc288b8-24c3-4c7d-8f26-c047a89c04d8", "node_type": "1", "metadata": {}, "hash": "d80a1540c6e695a1fdc1ef2ae1b74b229e60f2dff09db2519183dc48a3b23dae", "class_name": "RelatedNodeInfo"}}, "hash": "2b0d9b99880669eabcae6bbc1fb7f72df4f84096e9afd602acdce6aea152664e", "text": "Explicit linking\n\nIn the example above, we took advantage of the fact that a ``DynamicMap`` automatically becomes the stream source if a source isn't explicitly specified. If we want to link the stream instance to a different object we can specify our source explicitly. Here we will create a 2D ``Image`` of sine gratings, and then declare that this image is the ``source`` of the ``PointerXY`` stream. This pointer stream is then used to generate a single point that tracks the cursor when hovering over the image:\n\n\n```python\nxvals = np.linspace(0,4,202)\nys,xs = np.meshgrid(xvals, -xvals[::-1])\nimg = hv.Image(np.sin(((ys)**3)*xs))\n\npointer = streams.PointerXY(x=0,y=0, source=img)\npointer_dmap = hv.DynamicMap(lambda x, y: hv.Points([(x, y)]), streams=[pointer])\n```\n\nNow if we display a ``Layout`` consisting of the ``Image`` acting as the source together with the ``DynamicMap``, the point shown on the right tracks the cursor position when hovering over the image on the left:\n\n\n```python\nimg + pointer_dmap.opts(size=10, xlim=(-.5, .5), ylim=(-.5, .5))\n```\n\nThis will even work across different cells. If we use this particular stream instance in another ``DynamicMap`` and display it, this new visualization will also be supplied with the cursor position when hovering over the image. \n\nTo illustrate this, we will now use the pointer ``x`` and ``y`` position to generate cross-sections of the image at the cursor position on the ``Image``, making use of the ``Image.sample`` method. Note the use of ``np.clip`` to make sure the cross-section is well defined when the cusor goes out of bounds:\n\n\n```python\nx_sample = hv.DynamicMap(lambda x, y: img.sample(x=np.clip(x,-.49,.49)), streams=[pointer])\ny_sample = hv.DynamicMap(lambda x, y: img.sample(y=np.clip(y,-.49,.49)), streams=[pointer])\n\n(x_sample + y_sample).opts(opts.Curve(framewise=True))\n```\n\nNow when you hover over the ``Image`` above, you will see the cross-sections update while the point position to the right of the ``Image`` simultaneously updates.", "start_char_idx": 2, "end_char_idx": 2025, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1cc288b8-24c3-4c7d-8f26-c047a89c04d8": {"__data__": {"id_": "1cc288b8-24c3-4c7d-8f26-c047a89c04d8", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "00c85756-398e-4514-b35d-229ea2e0178b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "47d0da05fcf6252435370a9bbce6465a3c15148552d37ea25f33714c397a7cc7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f65b5e5f-092f-4d4b-b849-39b9a3758d02", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2b0d9b99880669eabcae6bbc1fb7f72df4f84096e9afd602acdce6aea152664e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d15ad201-d382-4c47-a0aa-e0761402f818", "node_type": "1", "metadata": {}, "hash": "f04e10b089c6f97bdabd4ad263c73c03fe00fe53044f4af0866848b7f05cd60d", "class_name": "RelatedNodeInfo"}}, "hash": "d80a1540c6e695a1fdc1ef2ae1b74b229e60f2dff09db2519183dc48a3b23dae", "text": "Unlinking objects\n\nSometimes we just want to display an object designated as a source without linking it to the stream. If the object is not a ``DynamicMap``, like the ``Image`` we designated as a ``source`` above, we can make a copy of the object using the ``clone`` method. We can do the same with ``DynamicMap`` though we just need to supply ``link_inputs=False`` as an extra argument.\n\nHere we will create a ``DynamicMap`` that draws a cross-hair at the cursor position:\n\n\n```python\npointer = streams.PointerXY(x=0, y=0)\ncross_dmap = hv.DynamicMap(lambda x, y: (hv.VLine(x) * hv.HLine(y)), streams=[pointer])\n```\n\nNow we will add two copies of the ``cross_dmap`` into a Layout but the subplot on the right will not be linking the inputs. Try hovering over the two subplots and observe what happens:\n\n\n```python\ncross_dmap + cross_dmap.clone(link=False)\n```\n\nNotice how hovering over the left plot updates the crosshair position on both subplots, while hovering over the right subplot has no effect.", "start_char_idx": 2, "end_char_idx": 1004, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d15ad201-d382-4c47-a0aa-e0761402f818": {"__data__": {"id_": "d15ad201-d382-4c47-a0aa-e0761402f818", "embedding": null, "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f95ab15d-b4e4-41c8-897d-ed29cb5712d2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7af7f821e6c0d9070c0d2dfffb213f05e0054c6da171a69be09313462a06fd43", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1cc288b8-24c3-4c7d-8f26-c047a89c04d8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d80a1540c6e695a1fdc1ef2ae1b74b229e60f2dff09db2519183dc48a3b23dae", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0614a1a0-c704-471a-b663-1da68cd37369", "node_type": "1", "metadata": {}, "hash": "4415f1d4ad10cb654dad97ce42299b7274b1a2810cb670f45e84b646fe6b9937", "class_name": "RelatedNodeInfo"}}, "hash": "f04e10b089c6f97bdabd4ad263c73c03fe00fe53044f4af0866848b7f05cd60d", "text": "Transient linked streams\n\nIn the basic Responding to Events user guide we saw that stream parameters can be updated and those values are then passed to the callback. This model works well for many different types of streams that have well-defined values at all times.\n\nThis approach is not suitable for certain events which only have a well defined value at a particular point in time. For instance, when you hover your mouse over a plot, the hover position always has a well-defined value but the click position is only defined when a click occurs (if it occurs).\n\nThis latter case is an example of what are called 'transient' streams. These streams are supplied new values only when they occur and fall back to a default value at all other times. This default value is typically ``None`` to indicate that the event is not occurring and therefore has no data.\n\n\nTransient streams are particularly useful when you are subscribed to multiple streams, some of which are only occasionally triggered. A good example are the ``Tap`` and ``DoubleTap`` streams; while you sometimes just want to know the last tapped position, we can only tell the two events apart if their values are ``None`` when not active. \n\nWe'll start by declaring a ``SingleTap`` and a ``DoubleTap`` stream as ``transient``. Since both streams supply 'x' and 'y' parameters, we will rename the ``DoubleTap`` parameters to 'x2' and 'y2'.\n\n\n```python\ntap = streams.SingleTap(transient=True)\ndouble_tap = streams.DoubleTap(rename={'x': 'x2', 'y': 'y2'}, transient=True)\n```\n\nNext we define a list of taps we can append to, and a function that accumulates the tap and double tap coordinates along with the number of taps, returning a ``Points`` Element of the tap positions.\n\n\n```python\ntaps = []\n\ndef record_taps(x, y, x2, y2):\n if None not in [x,y]:\n taps.append((x, y, 1))\n elif None not in [x2, y2]:\n taps.append((x2, y2, 2))\n return hv.Points(taps, vdims='Taps')\n```\n\nFinally we can create a ``DynamicMap`` from our callback and attach the streams. We also apply some styling so the points are colored depending on the number of taps.\n\n\n```python\ntaps_dmap = hv.DynamicMap(record_taps, streams=[tap, double_tap])\n\ntaps_dmap.opts(color='Taps', cmap={1: 'red', 2: 'gray'}, size=10, tools=['hover'])\n```\n\nNow try single- and double-tapping within the plot area, each time you tap a new point is appended to the list and displayed. Single taps show up in red and double taps show up in grey. We can also inspect the list of taps directly:\n\n\n```python\ntaps\n```", "start_char_idx": 2, "end_char_idx": 2549, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0614a1a0-c704-471a-b663-1da68cd37369": {"__data__": {"id_": "0614a1a0-c704-471a-b663-1da68cd37369", "embedding": null, "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ab863388-004f-43ba-a8c8-027f3a904982", "node_type": "4", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ca87903d95186c66e1be5b010d45d185215a6e0994ab7f1281f13342b6f0d718", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d15ad201-d382-4c47-a0aa-e0761402f818", "node_type": "1", "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f04e10b089c6f97bdabd4ad263c73c03fe00fe53044f4af0866848b7f05cd60d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "aaa38d44-3bd5-4bec-96ec-93ccebea64f1", "node_type": "1", "metadata": {}, "hash": "50942c194ab3ad22d3fc24b2bf7743baf85eaa3d4963eae0eac1527e46d21040", "class_name": "RelatedNodeInfo"}}, "hash": "4415f1d4ad10cb654dad97ce42299b7274b1a2810cb670f45e84b646fe6b9937", "text": "Data Processing Pipelines\n\n\n```python\nimport pandas as pd\nimport holoviews as hv\n\nfrom holoviews import opts\nfrom bokeh.sampledata import stocks\nfrom holoviews.operation.timeseries import rolling, rolling_outlier_std\n\nhv.extension('bokeh')\n\nopts.defaults(opts.Curve(width=600, framewise=True))\n```\n\nIn the previous guides we discovered how to load and declare dynamic, live data and how to transform elements using `dim` expressions and operations. In this guide we will discover how to combine dynamic data with operations to declare lazy and declarative data processing pipelines, which can be used for interactive exploration but can also drive complex dashboards or even bokeh apps.", "start_char_idx": 2, "end_char_idx": 688, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "aaa38d44-3bd5-4bec-96ec-93ccebea64f1": {"__data__": {"id_": "aaa38d44-3bd5-4bec-96ec-93ccebea64f1", "embedding": null, "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8c0cd4b0-dcdc-4fff-8fb0-8807bcda1c56", "node_type": "4", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1aafe33ae7cc34bd864fa9b714026d5fc919a6e6af86d3759543d2f3141fee1a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0614a1a0-c704-471a-b663-1da68cd37369", "node_type": "1", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4415f1d4ad10cb654dad97ce42299b7274b1a2810cb670f45e84b646fe6b9937", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "69bf15d2-bee4-4836-9e9a-134509aa9698", "node_type": "1", "metadata": {}, "hash": "38677fd1488bb8cd732e65c9e9f9ef450596fb22eae1b4ec28c7fc884f36dfa4", "class_name": "RelatedNodeInfo"}}, "hash": "50942c194ab3ad22d3fc24b2bf7743baf85eaa3d4963eae0eac1527e46d21040", "text": "Declaring dynamic data\n\nWe will begin by declaring a function which loads some data. In this case we will just load some stock data from the bokeh but you could imagine querying this data using REST interface or some other API or even loading some large collection of data from disk or generating the data from some simulation or data processing job.\n\n\n```python\ndef load_symbol(symbol, **kwargs):\n df = pd.DataFrame(getattr(stocks, symbol))\n df['date'] = df.date.astype('datetime64[ns]')\n return hv.Curve(df, ('date', 'Date'), ('adj_close', 'Adjusted Close'))\n\nstock_symbols = ['AAPL', 'FB', 'GOOG', 'IBM', 'MSFT']\ndmap = hv.DynamicMap(load_symbol, kdims='Symbol').redim.values(Symbol=stock_symbols)\n```\n\nWe begin by displaying our DynamicMap to see what we are dealing with. Recall that a ``DynamicMap`` is only evaluated when you request the key so the ``load_symbol`` function is only executed when first displaying the ``DynamicMap`` and whenever we change the widget dropdown:\n\n\n```python\ndmap\n```", "start_char_idx": 2, "end_char_idx": 1015, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "69bf15d2-bee4-4836-9e9a-134509aa9698": {"__data__": {"id_": "69bf15d2-bee4-4836-9e9a-134509aa9698", "embedding": null, "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c4398f28-d639-4bbf-a737-f8e1fabf3609", "node_type": "4", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "769d418a48e6f7be2ec01c2144a003c7803f8e78d7cd1cd11b99605c0fc20d03", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "aaa38d44-3bd5-4bec-96ec-93ccebea64f1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "50942c194ab3ad22d3fc24b2bf7743baf85eaa3d4963eae0eac1527e46d21040", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d4d5b99b-f71c-4fac-ae6f-d4da0ec60e49", "node_type": "1", "metadata": {}, "hash": "d37ed8d3b134300895bfaa489c5e5d320500a032f98180803295ad3af4ac567b", "class_name": "RelatedNodeInfo"}}, "hash": "38677fd1488bb8cd732e65c9e9f9ef450596fb22eae1b4ec28c7fc884f36dfa4", "text": "Processing data\n\nIt is very common to want to process some data, for this purpose HoloViews provides so-called ``Operations``, which are described in detail in the Transforming Elements. ``Operations`` are simply parameterized functions, which take HoloViews objects as input, transform them in some way and then return the output.\n\nIn combination with Dimensioned Containers such as ``HoloMap`` and ``GridSpace`` they are a powerful way to explore how the parameters of your transform affect the data. We will start with a simple example. HoloViews provides a ``rolling`` function which smoothes timeseries data with a rolling window. We will apply this operation with a ``rolling_window`` of 30, i.e. roughly a month of our daily timeseries data:\n\n\n```python\nsmoothed = rolling(dmap, rolling_window=30)\nsmoothed\n```\n\nAs you can see the ``rolling`` operation applies directly to our ``DynamicMap``, smoothing each ``Curve`` before it is displayed. Applying an operation to a ``DynamicMap`` keeps the data as a ``DynamicMap``, this means the operation is also applied lazily whenever we display or select a different symbol in the dropdown widget.", "start_char_idx": 2, "end_char_idx": 1149, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d4d5b99b-f71c-4fac-ae6f-d4da0ec60e49": {"__data__": {"id_": "d4d5b99b-f71c-4fac-ae6f-d4da0ec60e49", "embedding": null, "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "51a580f1-c5be-4fcc-bc48-212752d8424a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cb821a07f58850144d024fdfd1a666e82ff2985394fbbe02c820e1bf7a9cb691", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "69bf15d2-bee4-4836-9e9a-134509aa9698", "node_type": "1", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "38677fd1488bb8cd732e65c9e9f9ef450596fb22eae1b4ec28c7fc884f36dfa4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f6bfd598-0c1c-46dc-bafe-0499654f6b7e", "node_type": "1", "metadata": {}, "hash": "fb8a127ee8edbc780c69eecf53ac4965768652b0dfdc4d6854bd99c17f102a76", "class_name": "RelatedNodeInfo"}}, "hash": "d37ed8d3b134300895bfaa489c5e5d320500a032f98180803295ad3af4ac567b", "text": "Dynamically evaluating parameters on operations and transforms with ``.apply``\n\nThe ``.apply`` method allows us to automatically build a dynamic pipeline given an object and some operation or function along with parameter, stream or widget instances passed in as keyword arguments. Internally it will then build a `Stream` to ensure that whenever one of these changes the plot is updated. To learn more about streams see the Responding to Events.\n\nThis mechanism allows us to build powerful pipelines by linking parameters on a user defined class or even an external widget, e.g. here we import an ``IntSlider`` widget from ``panel``:\n\n\n```python\nimport panel as pn\n\nslider = pn.widgets.IntSlider(name='rolling_window', start=1, end=100, value=50)\n```\n\nUsing the ``.apply`` method we could now apply the ``rolling`` operation to the DynamicMap and link the slider to the operation's ``rolling_window`` parameter (which also works for simple functions as will be shown below). However, to further demonstrate the features of `dim` expressions and the `.transform` method, which we first introduced in the Transforming elements user guide, we will instead apply the rolling mean using the `.df` namespace accessor on a `dim` expression:\n\n\n```python\nrolled_dmap = dmap.apply.transform(adj_close=hv.dim('adj_close').df.rolling(slider).mean())\n\nrolled_dmap\n```\n\nThe ``rolled_dmap`` is another DynamicMap that defines a simple two-step pipeline, which calls the original callback when the ``symbol`` changes and reapplies the expression whenever the slider value changes. Since the widget's value is now linked to the plot via a ``Stream`` we can display the widget and watch the plot update:\n\n\n```python\nslider\n```\n\nThe power of building pipelines is that different visual components can share the same inputs but compute very different things from that data. The part of the pipeline that is shared is only evaluated once making it easy to build efficient data processing code. To illustrate this we will also apply the ``rolling_outlier_std`` operation which computes outliers within the ``rolling_window`` and again we will supply the widget ``value``:\n\n\n```python\noutliers = dmap.apply(rolling_outlier_std, rolling_window=slider.param.value)\n\nrolled_dmap * outliers.opts(color='red', marker='triangle')\n```\n\nWe can chain operations like this indefinitely and attach parameters or explicit streams to each stage. By chaining we can watch our visualization update whenever we change a stream value anywhere in the pipeline and HoloViews will be smart about which parts of the pipeline are recomputed, which allows us to build complex visualizations very quickly.\n\nThe ``.apply`` method is also not limited to operations. We can just as easily apply a simple Python function to each object in the ``DynamicMap``. Here we define a function to compute the residual between the original ``dmap`` and the ``rolled_dmap``.\n\n\n```python\ndef residual_fn(overlay):\n # Get first and second Element in overlay\n el1, el2 = overlay.get(0), overlay.get(1)\n\n # Get x-values and y-values of curves\n xvals = el1.dimension_values(0)\n yvals = el1.dimension_values(1)\n yvals2 = el2.dimension_values(1)\n\n # Return new Element with subtracted y-values\n # and new label\n return el1.clone((xvals, yvals-yvals2),\n vdims='Residual')\n```\n\nIf we overlay the two DynamicMaps we can then dynamically broadcast this function to each of the overlays, producing a new DynamicMap which responds to both the symbol selector widget and the slider:\n\n\n```python\nresidual = (dmap * rolled_dmap).apply(residual_fn)\n\nresidual\n```\n\nIn later guides we will see how we can combine HoloViews plots and Panel widgets into custom layouts allowing us to define complex dashboards. For more information on how to deploy bokeh apps from HoloViews and build dashboards see the Deploying Bokeh Apps and Dashboards guides. To get a quick idea of what this might look like let's compose all the components we have no built:", "start_char_idx": 2, "end_char_idx": 4016, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f6bfd598-0c1c-46dc-bafe-0499654f6b7e": {"__data__": {"id_": "f6bfd598-0c1c-46dc-bafe-0499654f6b7e", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e9e49085-8a8d-4bb9-b113-0abf9c9e505f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8daefa690840b9757b237d213f796be250251fea790521666e2ea1cbed2070bf", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d4d5b99b-f71c-4fac-ae6f-d4da0ec60e49", "node_type": "1", "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d37ed8d3b134300895bfaa489c5e5d320500a032f98180803295ad3af4ac567b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7233ef67-d7ea-4aba-8add-5ff7fdced4bb", "node_type": "1", "metadata": {}, "hash": "3b4d77317857894056a96a2a5c97482ab1222e9571d51fcdfcbc74ac72da1302", "class_name": "RelatedNodeInfo"}}, "hash": "fb8a127ee8edbc780c69eecf53ac4965768652b0dfdc4d6854bd99c17f102a76", "text": "Working with large data using Datashader\n\nThe various plotting-library backends supported by HoloViews, such as Matplotlib, Bokeh, and Plotly, each have limitations on the amount of data that is practical to work with. Bokeh and Plotly in particular mirror your data directly into an HTML page viewable in your browser, which can cause problems when data sizes approach the limited memory available for each web page in current browsers.\n\nLuckily, a visualization of even the largest dataset will be constrained by the resolution of your display device, and so one approach to handling such data is to pre-render or rasterize the data into a fixed-size array or image *before* sending it to the backend plotting library and thus to your local web browser. The Datashader library provides a high-performance big-data server-side rasterization pipeline that works seamlessly with HoloViews to support datasets that are orders of magnitude larger than those supported natively by the plotting-library backends, including millions or billions of points even on ordinary laptops.\n\nHere, we will see how and when to use Datashader with HoloViews Elements and Containers. For simplicity in this discussion we'll focus on simple synthetic datasets, but Datashader's examples include a wide variety of real datasets that give a much better idea of the power of using Datashader with HoloViews, and HoloViz.org shows how to install and work with HoloViews and Datashader together.\n\n.container { width:100% !important; }\n\n\n```python\nimport datashader as ds\nimport numpy as np\nimport holoviews as hv\nimport pandas as pd\nimport numpy as np\n\nfrom holoviews import opts\nfrom holoviews.operation.datashader import datashade, rasterize, shade, dynspread, spread\nfrom holoviews.operation.resample import ResampleOperation2D\nfrom holoviews.operation import decimate\n\nhv.extension('bokeh','matplotlib', width=100)", "start_char_idx": 2, "end_char_idx": 1896, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7233ef67-d7ea-4aba-8add-5ff7fdced4bb": {"__data__": {"id_": "7233ef67-d7ea-4aba-8add-5ff7fdced4bb", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "502f45bc-e4e1-48bb-9732-56fb3d60e85d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2ef7a4c9de113063c4fb02405b3418b53d5a50e943366dd7c5a355a52c015679", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f6bfd598-0c1c-46dc-bafe-0499654f6b7e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fb8a127ee8edbc780c69eecf53ac4965768652b0dfdc4d6854bd99c17f102a76", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "00802514-5b0c-4512-8b18-eb0c126c53f4", "node_type": "1", "metadata": {}, "hash": "952afe85c5c02e6f1f3b3c3485de6a09831bfcd8f958c6aecf31322a8f1db11e", "class_name": "RelatedNodeInfo"}}, "hash": "3b4d77317857894056a96a2a5c97482ab1222e9571d51fcdfcbc74ac72da1302", "text": "Default values suitable for this notebook\ndecimate.max_samples=1000\ndynspread.max_px=20\ndynspread.threshold=0.5\nResampleOperation2D.width=500\nResampleOperation2D.height=500\n\ndef random_walk(n, f=5000):\n \"\"\"Random walk in a 2D space, smoothed with a filter of length f\"\"\"\n xs = np.convolve(np.random.normal(0, 0.1, size=n), np.ones(f)/f).cumsum()\n ys = np.convolve(np.random.normal(0, 0.1, size=n), np.ones(f)/f).cumsum()\n xs += 0.1*np.sin(0.1*np.array(range(n-1+f))) # add wobble on x axis\n xs += np.random.normal(0, 0.005, size=n-1+f) # add measurement noise\n ys += np.random.normal(0, 0.005, size=n-1+f)\n return np.column_stack([xs, ys])\n\ndef random_cov():\n \"\"\"Random covariance for use in generating 2D Gaussian distributions\"\"\"\n A = np.random.randn(2,2)\n return np.dot(A, A.T)\n\ndef time_series(T = 1, N = 100, mu = 0.1, sigma = 0.1, S0 = 20): \n \"\"\"Parameterized noisy time series\"\"\"\n dt = float(T)/N\n t = np.linspace(0, T, N)\n W = np.random.standard_normal(size = N) \n W = np.cumsum(W)*np.sqrt(dt) # standard brownian motion\n X = (mu-0.5*sigma**2)*t + sigma*W \n S = S0*np.exp(X) # geometric brownian motion\n return S\n```\n\nThis notebook makes use of dynamic updates, which require a running a live Jupyter or Bokeh server.\nWhen viewed statically, the plots will not update fully when you zoom and pan.", "start_char_idx": 2, "end_char_idx": 1361, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "00802514-5b0c-4512-8b18-eb0c126c53f4": {"__data__": {"id_": "00802514-5b0c-4512-8b18-eb0c126c53f4", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "08e7225c-b7f6-429c-84db-af6849a727b7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "82eb37179b5f2c44f43bc6a9442406ea6d65e4cf7c0676a3bc1203446cff0319", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7233ef67-d7ea-4aba-8add-5ff7fdced4bb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3b4d77317857894056a96a2a5c97482ab1222e9571d51fcdfcbc74ac72da1302", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e318d8be-0ca4-465d-a4b1-ccf07183f01b", "node_type": "1", "metadata": {}, "hash": "7036364494173af3a1ae9386cd143fce3d2a4f473808a00a748908989c301e4a", "class_name": "RelatedNodeInfo"}}, "hash": "952afe85c5c02e6f1f3b3c3485de6a09831bfcd8f958c6aecf31322a8f1db11e", "text": "Principles of datashading\n\nBecause HoloViews elements are fundamentally data containers, not visualizations, you can very quickly declare elements such as ``Points`` or ``Path`` containing datasets that may be as large as the full memory available on your machine (or even larger if using Dask dataframes). So even for very large datasets, you can easily specify a data structure that you can work with for making selections, sampling, aggregations, and so on. However, as soon as you try to visualize it directly with either the Matplotlib, Plotly, or Bokeh plotting extensions, the rendering process may be prohibitively expensive.\n\nLet's start with a simple example that's easy to visualize in any plotting library:\n\n\n```python\nnp.random.seed(1)\npoints = hv.Points(np.random.multivariate_normal((0,0), [[0.1, 0.1], [0.1, 1.0]], (1000,)),label=\"Points\")\npaths = hv.Path([random_walk(2000,30)], kdims=[\"u\",\"v\"], label=\"Paths\")\n\npoints + paths\n```\n\nThese browser-based plots are fully interactive, as you can see if you select the Wheel Zoom or Box Zoom tools and use your scroll wheel or click and drag. \n\nBecause all of the data in these plots gets transferred directly into the web browser, the interactive functionality will be available even on a static export of this figure as a web page. Note that even though the visualization above is not computationally expensive, even with just 1000 points as in the scatterplot above, the plot already suffers from overplotting, with later points obscuring previously plotted points. \n\nWith much larger datasets, these issues will quickly make it impossible to see the true structure of the data. We can easily declare 50X or 1000X larger versions of the same plots above, but if we tried to visualize them directly they would be unusably slow even if the browser did not crash:\n\n\n```python\nnp.random.seed(1)\npoints = hv.Points(np.random.multivariate_normal((0,0), [[0.1, 0.1], [0.1, 1.0]], (1000000,)),label=\"Points\")\npaths = hv.Path([0.15*random_walk(100000) for i in range(10)], kdims=[\"u\",\"v\"], label=\"Paths\")\n\n#points + paths ## Danger! Browsers can't handle 1 million points!\n```\n\nLuckily, HoloViews Elements are just containers for data and associated metadata, not plots, so HoloViews can generate entirely different types of visualizations from the same data structure when appropriate. For instance, in the plot on the left below you can see the result of applying a `decimate()` operation acting on the `points` object, which will automatically downsample this million-point dataset to at most 1000 points at any time as you zoom in or out:", "start_char_idx": 2, "end_char_idx": 2606, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e318d8be-0ca4-465d-a4b1-ccf07183f01b": {"__data__": {"id_": "e318d8be-0ca4-465d-a4b1-ccf07183f01b", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "08e7225c-b7f6-429c-84db-af6849a727b7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "82eb37179b5f2c44f43bc6a9442406ea6d65e4cf7c0676a3bc1203446cff0319", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "00802514-5b0c-4512-8b18-eb0c126c53f4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "952afe85c5c02e6f1f3b3c3485de6a09831bfcd8f958c6aecf31322a8f1db11e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c1b5fa23-2bc1-48fa-97fb-f2f63257a98c", "node_type": "1", "metadata": {}, "hash": "cd65052149ef28ca7e9ce8d220e205a8162b9b1427f1313d64fbb20a74d3b8d5", "class_name": "RelatedNodeInfo"}}, "hash": "7036364494173af3a1ae9386cd143fce3d2a4f473808a00a748908989c301e4a", "text": "```python\ndecimate( points).relabel(\"Decimated Points\") + \\\nrasterize(points).relabel(\"Rasterized Points\").opts(colorbar=True, width=350) + \\\nrasterize(paths ).relabel(\"Rasterized Paths\")\n```\n\nDecimating a plot in this way can be useful, but it discards most of the data even while still suffering from overplotting. \n\nIf you have Datashader installed, you can instead use Datashader operations like `rasterize()` to create a dynamic Datashader-based Bokeh plot. The middle plot above shows the result of using `rasterize()` to create a dynamic Datashader-based plot out of an Element with arbitrarily large data. In the rasterized version, the data is binned into a fixed-size 2D array automatically on every zoom or pan event, revealing all the data available at that zoom level and avoiding issues with overplotting by dynamically rescaling the colors used. Each pixel is colored by how many datapoints fall in that pixel, faithfully revealing the data's distribution in a easy-to-display plot. The colorbar indicates the number of points indicated by that color, up to 300 or so for the pixels with the most points here. The same process is used for the line-based data in the Paths plot, where darker colors represent path intersections.\n\nThese two Datashader-based plots are similar to the native Bokeh plots above, but instead of making a static Bokeh plot that embeds points or line segments directly into the browser, HoloViews sets up a Bokeh plot with dynamic callbacks instructing Datashader to rasterize the data into a fixed-size array (effectively a 2D histogram) instead. The dynamic re-rendering provides an interactive user experience, even though the data itself is never provided directly to the browser. Of course, because the full data is not in the browser, a static export of this page (e.g. on holoviews.org or on anaconda.org) will only show the initially rendered version, and will not update with new rasterized arrays when zooming as it will when there is a live Python process available.\n\nThough you can no longer have a completely interactive exported file, with the Datashader version on a live server you can now change the number of data points from 1000000 to 10000000 or more to see how well your machine will handle larger datasets. It will get a bit slower, but if you have enough memory, it should still be very usable, and should never crash your browser like transferring the whole dataset into your browser would. If you don't have enough memory, you can instead set up a Dask dataframe as shown in other Datashader examples, which will provide out-of-core and/or distributed processing to handle even the largest datasets if you have enough computational power and memory or are willing to wait for out-of-core computation.", "start_char_idx": 2609, "end_char_idx": 5376, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c1b5fa23-2bc1-48fa-97fb-f2f63257a98c": {"__data__": {"id_": "c1b5fa23-2bc1-48fa-97fb-f2f63257a98c", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "72d0f21a-ccb6-40ff-badc-13c2e3ea8593", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dd221b71c14d0a1fb4922ee86bc9e6577f09b475a9435836b0af10d778c03ccc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e318d8be-0ca4-465d-a4b1-ccf07183f01b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7036364494173af3a1ae9386cd143fce3d2a4f473808a00a748908989c301e4a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7d035ae3-f134-47cb-bc62-773a847eec70", "node_type": "1", "metadata": {}, "hash": "b261e594c4775f24107eab9813d34605f48d5c6b2bf2633582489a993ff0e597", "class_name": "RelatedNodeInfo"}}, "hash": "cd65052149ef28ca7e9ce8d220e205a8162b9b1427f1313d64fbb20a74d3b8d5", "text": "HoloViews operations for datashading\n\nHoloViews provides several operations for calling Datashader on HoloViews elements, including `rasterize()`, `shade()`, and `datashade()`.\n\n`rasterize()` uses Datashader to render the data into what is by default a 2D histogram, where every array cell counts the data points falling into that pixel. Bokeh then colormaps that array, turning each cell into a pixel in an image. \n\nInstead of having Bokeh do the colormapping, you can instruct Datashader to do so, by wrapping the output of `rasterize()` in a call to `shade()`, where `shade()` is Datashader's colormapping function. The `datashade()` operation is also provided as a simple macro, where `datashade(x)` is equivalent to `shade(rasterize(x))`:\n\n\n```python\nropts = dict(colorbar=True, tools=[\"hover\"], width=350)\n\nrasterize( points).opts(cmap=\"kbc_r\", cnorm=\"linear\").relabel('rasterize()').opts(**ropts).hist() + \\\nshade(rasterize(points), cmap=\"kbc_r\", cnorm=\"linear\").relabel(\"shade(rasterize())\") + \\\ndatashade( points, cmap=\"kbc_r\", cnorm=\"linear\").relabel(\"datashade()\")\n```\n\nIn all three of the above plots, `rasterize()` is being called to aggregate the data (a large set of x,y locations) into a rectangular grid, with each grid cell counting up the number of points that fall into it. In the first plot, only `rasterize()` is done, and the resulting numeric array of counts is passed to Bokeh for colormapping. That way hover and colorbars can be supported (as shown), and Bokeh can then provide dynamic (client-side, browser-based) colormapping tools in JavaScript, allowing users to have dynamic control over even static HTML plots. For instance, in this case, users can use the Box Select tool and select a range of the histogram shown, dynamically remapping the colors used in the plot to cover the selected range.\n\nThe other two plots should be identical in appearance, but with the numerical array output of `rasterize()` mapped into RGB colors by Datashader itself, in Python (\"server-side\"), which allows some special Datashader computations described below but prevents other Bokeh-based features like hover and colorbars from being used. Here we've instructed Datashader to use the same colormap used by bokeh, so that the plots look similar, but as you can see the `rasterize()` colormap is determined by a HoloViews plot option, while the `shade` and `datashade` colormap is determined by an argument to those operations. See ``hv.help(rasterize)``, ``hv.help(shade)``, and ``hv.help(datashade)`` for options that can be selected, and the Datashader web site for all the details. HoloViews also provides lower-level `aggregate()` and `regrid()` operations that implement `rasterize()` and give more control over how the data is aggregated, but these are not needed for typical usage.", "start_char_idx": 2, "end_char_idx": 2828, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7d035ae3-f134-47cb-bc62-773a847eec70": {"__data__": {"id_": "7d035ae3-f134-47cb-bc62-773a847eec70", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0820d5e3-caf3-404b-a1d3-8f65c2099c4f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "421b4012ada4b6c66f5403bd5a368e50dd6302ddab23e6c7f133b1cdae2190d7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c1b5fa23-2bc1-48fa-97fb-f2f63257a98c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cd65052149ef28ca7e9ce8d220e205a8162b9b1427f1313d64fbb20a74d3b8d5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6d9ac7d8-f57a-410f-b248-0709b0f71014", "node_type": "1", "metadata": {}, "hash": "2eeb005f526edf5caddf6470767764a944724148b546cdfa64b39c0d8f9e8f19", "class_name": "RelatedNodeInfo"}}, "hash": "b261e594c4775f24107eab9813d34605f48d5c6b2bf2633582489a993ff0e597", "text": "Setting options\n\nBy their nature, the datashading operations accept one HoloViews Element type and return a different Element type. Regardless of what type they are given, `rasterize()` returns an `hv.Image`, while `shade()` and `datashade()` return an `hv.RGB`. It is important to keep this transformation in mind, because HoloViews options that you set on your original Element type are not normally transferred to your new Element:\n\n\n```python\npoints2 = decimate(points, dynamic=False, max_samples=3000)\npoints2.opts(color=\"green\", size=6, marker=\"s\")\n\npoints2 + rasterize(points2).relabel(\"Rasterized\") + datashade(points2).relabel(\"Datashaded\")\n```\n\nThe datashaded plot represents each point as a single pixel, many of which are very difficult to see, and you can see that the color, size, and marker shape that you set on the Points element will not be applied to the rasterized or datashaded plot, because `size` and `marker` are not directly applicable to the numerical arrays of `hv.Image` and the pixel arrays of `hv.RGB`. \n\nIf you want to use Datashader to recreate the options from the original plot, you can usually do so, but you will have to use the various Datashader-specific features explained in the sections below along with HoloViews options specifically for `hv.Image` or `hv.RGB`. For example:\n\n\n```python\nw=225\n\npoints2 + \\\nspread(rasterize(points2, width=w, height=w), px=4, shape='square').opts(cmap=[\"green\"]).relabel(\"Rasterized\") + \\\nspread(datashade(points2, width=w, height=w, cmap=[\"green\"]), px=4, shape='square').relabel(\"Datashaded\")\n```\n\nNote that by forcing the single-color colormap `[\"green\"]`, Datashader's support for avoiding overplotting has been lost. In most cases you will want to reveal the underlying distribution while avoiding overplotting, either by using a proper colormap (**Rasterized** below) or by using the alpha channel to convey the number of overlapping points (**Datashaded** below).\n\n\n```python\nimport bokeh.palettes as bp\ngreens = bp.Greens[256][::-1][64:]\n```\n\n\n```python\npoints2 + \\\nspread(rasterize(points2, width=w, height=w), px=4, shape='square').opts(cmap=greens, cnorm='eq_hist').relabel(\"Rasterized\") +\\\nspread(datashade(points2, width=w, height=w, cmap=\"green\", cnorm='eq_hist'), px=4, shape='square').relabel(\"Datashaded\")\n```", "start_char_idx": 2, "end_char_idx": 2302, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6d9ac7d8-f57a-410f-b248-0709b0f71014": {"__data__": {"id_": "6d9ac7d8-f57a-410f-b248-0709b0f71014", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "420c75bb-7740-4da1-a112-c2065658e5be", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fe8b40a93bf63f7a87679a205edddfaee7b816d110298d8979071749d7bafb1d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7d035ae3-f134-47cb-bc62-773a847eec70", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b261e594c4775f24107eab9813d34605f48d5c6b2bf2633582489a993ff0e597", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fcbc1f0e-0cf7-4003-87e1-8f0916b78e5b", "node_type": "1", "metadata": {}, "hash": "d28ac8c067a154e5da697351ecf69ddd1cee9197e95a234a7bd1bc8653ab76c5", "class_name": "RelatedNodeInfo"}}, "hash": "2eeb005f526edf5caddf6470767764a944724148b546cdfa64b39c0d8f9e8f19", "text": "Colormapping\n\nAs you can see above, the choice of colormap and the various colormapping options can be very important for datashaded plots. One issue often seen in large, real-world datasets is that there is structure at many spatial and value scales, which requires special attention to colormapping options. This example dataset from the Datashader documentation illustrates the issues, with data clustering at five different spatial scales:\n\n\n```python\nnum=10000\nnp.random.seed(1)\n\ndists = {cat: pd.DataFrame(dict([('x',np.random.normal(x,s,num)), \n ('y',np.random.normal(y,s,num)), \n ('val',val), \n ('cat',cat)])) \n for x, y, s, val, cat in \n [( 2, 2, 0.03, 10, \"d1\"), \n ( 2, -2, 0.10, 20, \"d2\"), \n ( -2, -2, 0.50, 30, \"d3\"), \n ( -2, 2, 1.00, 40, \"d4\"), \n ( 0, 0, 3.00, 50, \"d5\")] }\n\ndf = pd.concat(dists,ignore_index=True)\ndf[\"cat\"]=df[\"cat\"].astype(\"category\")\ndf\n```\n\nEach of the five categories has 10000 points, but distributed over different spatial areas. Bokeh supports three colormap normalization options, which each behave differently:\n\n\n```python\nropts = dict(tools=[\"hover\"], height=380, width=330, colorbar=True, colorbar_position=\"bottom\")\n\nhv.Layout([rasterize(hv.Points(df)).opts(**ropts).opts(cnorm=n).relabel(n)\n for n in [\"linear\", \"log\", \"eq_hist\"]])\n```\n\nHere, the `linear` map is easy to interpret, but nearly all of the pixels are drawn in the lightest blue, because the highest-count pixel (around a count of 6000) is much larger in value than the typical pixels. The other two plots show the full structure (five concentrations of data points, including one in the background), with `log` using a standard logarithmic transformation of the count data before colormapping, and `eq_hist` using a histogram-equalization technique (see the Datashader docs) to reveal structure without any assumptions about the incoming distribution (but with an irregularly spaced colormap that makes the numeric values difficult to reason about). In practice, it is generally a good idea to use `eq_hist` when exploring a large dataset initially, so that you will see any structure present, then switch to `log` or `linear` as appropriate to share the plots with a simpler-to-explain colormap. All three of these options are supported by the various backends (including Bokeh version 2.2.3 or later) and by `shade()` and `datashade()` except that `eq_hist` is not yet available for the Plotly backend.\n\nSince datashader only sends the data currently in view to the plotting backend, the default behavior is to rescale the colormap to the range of the visible data as the zoom level changes. This behavior may not be desirable when working with images; to instead use a fixed colormap range, the `clim` parameter can be passed to the `bokeh` backend via the `opts()` method. Note that this approach works with `rasterize()` where the colormapping is done by the `bokeh` backend. With `datashade()`, the colormapping is done with the `shade()` function which takes a `clims` parameter directly instead of passing additional parameters to the backend via `opts()`. For example (removing the semicolon in a live notebook to see the output):\n\n\n```python\npts1 = rasterize(hv.Points(df)).opts(**ropts).opts(tools=[], cnorm='log', axiswise=True)\npts2 = rasterize(hv.Points(df)).opts(**ropts).opts(tools=[], cnorm='log', axiswise=True)\n\npts1 + pts2.opts(clim=(0, 10000));\n```\n\n\n\nBy default, pixels with an integer count of zero or a floating-point value of NaN are transparent, letting the plot background show through so that the data can be used in overlays. If you want zero to map to the lowest colormap color instead to make a dense, fully filled-in image, you can use `redim.nodata` to set the `Dimension.nodata` parameter to None:", "start_char_idx": 2, "end_char_idx": 3914, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fcbc1f0e-0cf7-4003-87e1-8f0916b78e5b": {"__data__": {"id_": "fcbc1f0e-0cf7-4003-87e1-8f0916b78e5b", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "420c75bb-7740-4da1-a112-c2065658e5be", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fe8b40a93bf63f7a87679a205edddfaee7b816d110298d8979071749d7bafb1d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6d9ac7d8-f57a-410f-b248-0709b0f71014", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2eeb005f526edf5caddf6470767764a944724148b546cdfa64b39c0d8f9e8f19", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "af618ba4-256c-40fc-a4e6-1db5d9567dc7", "node_type": "1", "metadata": {}, "hash": "8a31eea07cb95ecd1f96ad91171655059151943314a8ba0464d54648d15f7e75", "class_name": "RelatedNodeInfo"}}, "hash": "d28ac8c067a154e5da697351ecf69ddd1cee9197e95a234a7bd1bc8653ab76c5", "text": "```python\npts1 = rasterize(hv.Points(df)).opts(**ropts).opts(tools=[], cnorm='log', axiswise=True)\npts2 = rasterize(hv.Points(df)).opts(**ropts).opts(tools=[], cnorm='log', axiswise=True)\n\npts1 + pts2.opts(clim=(0, 10000));\n```\n\n\n\nBy default, pixels with an integer count of zero or a floating-point value of NaN are transparent, letting the plot background show through so that the data can be used in overlays. If you want zero to map to the lowest colormap color instead to make a dense, fully filled-in image, you can use `redim.nodata` to set the `Dimension.nodata` parameter to None:\n\n\n```python\nhv.Layout([rasterize(hv.Points(df), vdim_prefix='').redim.nodata(Count=n)\\\n .opts(**ropts, cnorm=\"eq_hist\").relabel(\"nodata=\"+str(n))\n for n in [0, None]])\n```", "start_char_idx": 3325, "end_char_idx": 4106, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "af618ba4-256c-40fc-a4e6-1db5d9567dc7": {"__data__": {"id_": "af618ba4-256c-40fc-a4e6-1db5d9567dc7", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "63720f59-3cf7-47b4-95ee-24e8b5e1caae", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "027de44ff7c98f51507888c22bef6f0ee54b16643b3301fb4eb671b6a7f66766", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fcbc1f0e-0cf7-4003-87e1-8f0916b78e5b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d28ac8c067a154e5da697351ecf69ddd1cee9197e95a234a7bd1bc8653ab76c5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3123b027-a01b-4d29-89db-64a15d5dac10", "node_type": "1", "metadata": {}, "hash": "5db212d1e7adc879798646f1780158c1b82f701adc78b7f383958e8194b2df79", "class_name": "RelatedNodeInfo"}}, "hash": "8a31eea07cb95ecd1f96ad91171655059151943314a8ba0464d54648d15f7e75", "text": "Spreading and antialiasing\n\nBy default, Datashader treats points and lines as infinitesimal in width, such that a given point or small bit of line segment appears in at most one pixel. This approach ensures that the overall distribution of the points will be mathematically well founded -- each pixel will scale in value directly by the number of points that fall into it, or by the lines that cross it. As a consequence, Datashader's \"marker size\" and \"line width\" are effectively one pixel by default.\n\nHowever, many monitors are sufficiently high resolution that a single-pixel point or line can be difficult to see---one pixel may not be visible at all on its own, and even if it is visible it is often difficult to see its color. To compensate for this, HoloViews provides access to Datashader's raster-based \"spreading\" (a generalization of image dilation and convolution), which makes isolated nonzero cells \"spread\" into adjacent ones for visibility. There are two varieties of spreading supported:\n\n1. ``spread``: fixed spreading of a certain number of cells (pixels), which is useful if you want to be sure how much spreading is done regardless of the properties of the data.\n2. ``dynspread``: spreads up to a maximum size as long as it does not exceed a specified fraction of adjacency between cells (pixels) (controlled by a `threshold` parameter).\n\nDynamic spreading is typically more useful for interactive plotting, because it adjusts depending on how close the datapoints are to each other on screen. As of Datashader 0.12, both types of spreading are supported for both `rasterize()` and `shade()`, but previous Datashader versions only support spreading on the RGB output of `shade()`.\n\nAs long as you have Datashader 0.12 or later, you can compare the results when you zoom the two plots below; when you zoom in far enough you should be able to see that the in the two zoomed-in plots below, then zoom out to see that the plots are the same when points are clustered together to form a distribution. (If running a live notebook; remove the semicolon so that you see the live output rather than the saved GIF.)\n\n\n```python\npts = rasterize(points).opts(cnorm='eq_hist')\n\npts + dynspread(pts);\n```\n\n\n\nBoth plots show the same data, and look identical when zoomed out, but when zoomed in enough you should be able to see the individual data points on the right while the ones on the left are barely visible. The dynspread parameters typically need some hand tuning, as the only purpose of such spreading is to make things visible on a particular monitor for a particular observer; the underlying mathematical operations in Datashader do not normally need parameters to be adjusted.\n\nDynspread is not usable with connected plots like trajectories or curves, because the spreading amount is measured by the fraction of cells that have neighbors closer than the given spread distance, which is always 100% when datapoints are connected together. For connected plots you can instead use `spread` with a fixed value to expand patterns by `px` in every direction after they are drawn, or (for Datashader 0.14 or later) pass an explicit width like `line_width=1` to the rasterizer (at some cost in performance) to draw fully antialiased lines with the specified width:\n\n\n```python\nrasterize(paths).relabel(\"Rasterized\") + \\\nspread(rasterize(paths), px=1).relabel(\"Spread 1\") + \\\nrasterize(paths, line_width=2).relabel(\"Antialiased line_width 2\")\n```", "start_char_idx": 2, "end_char_idx": 3461, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3123b027-a01b-4d29-89db-64a15d5dac10": {"__data__": {"id_": "3123b027-a01b-4d29-89db-64a15d5dac10", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5449c7a9-b3cd-4b7c-a1c7-a2aa227fbe03", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7179370645d8f220d15772357121c08639db976ebd09e2979bd40acc9e880d7e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "af618ba4-256c-40fc-a4e6-1db5d9567dc7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8a31eea07cb95ecd1f96ad91171655059151943314a8ba0464d54648d15f7e75", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8e9b8ec8-0bf0-40e3-a001-bf0a490021b3", "node_type": "1", "metadata": {}, "hash": "64bf4168a46a2d133899c00a20abbb5fb52c3fd4c60eaa41637f325fb868398d", "class_name": "RelatedNodeInfo"}}, "hash": "5db212d1e7adc879798646f1780158c1b82f701adc78b7f383958e8194b2df79", "text": "Multidimensional plots\n\nThe above plots show two dimensions of data plotted along *x* and *y*, but Datashader operations can be used with additional dimensions as well. For instance, an extra dimension (here called `k`), can be treated as a category label and used to colorize the points or lines, aggregating the data points separately depending on which category value they have. Compared to a standard overlaid scatterplot that would suffer from overplotting, here the result will be merged mathematically by Datashader, completely avoiding any overplotting issues except any local issues that may arise from spreading when zoomed in:\n\n\n```python\nnp.random.seed(3)\nkdims=['d1','d2']\nnum_ks=8\n\ndef rand_gauss2d(value=0, n=100000):\n \"\"\"Return a randomly shaped 2D Gaussian distribution with an associated numeric value\"\"\"\n g = 100*np.random.multivariate_normal(np.random.randn(2), random_cov(), (n,))\n return np.hstack((g,value*np.ones((g.shape[0],1))))\n```\n\n\n```python\ngaussians = {str(i): hv.Points(rand_gauss2d(i), kdims, \"i\") for i in range(num_ks)}\n\nc = dynspread(datashade(hv.NdOverlay(gaussians, kdims='k'), aggregator=ds.by('k', ds.count())))\nm = dynspread(datashade(hv.NdOverlay(gaussians, kdims='k'), aggregator=ds.by('k', ds.mean(\"i\"))))\n\nc.opts(width=400) + m.opts(width=400)\n```\n\nAbove you can see that (as of Datashader 0.11) categorical aggregates can take any reduction function, either `count`ing the datapoints (left) or reporting some other statistic (e.g. the mean value of a column, right). This type of categorical mixing is currently only supported by `shade()` and `datashade()`, not `rasterize()` alone, because it depends on Datashader's custom color mixing code.\n\nCategorical aggregates are one way to allow separate lines or other shapes to be visually distinctive from one another while avoiding obscuring data due to overplotting:\n\n\n```python\nlines = {str(i): hv.Curve(time_series(N=10000, S0=200+np.random.rand())) for i in range(num_ks)}\nlineoverlay = hv.NdOverlay(lines, kdims='k')\ndatashade(lineoverlay, pixel_ratio=2, line_width=4, aggregator=ds.by('k', ds.count())).opts(width=800)\n```\n\nAs you can see, overlapping colors yield color mixtures that indicate that the given pixels contain data from multiple curves, which helps users realize where they need to zoom in to see further detail.\n\nNote that Bokeh only ever sees an image come out of `datashade`, not any of the actual data. As a result, providing legends and keys has to be done separately, though we are hoping to make this process more seamless. For now, you can show a legend by adding a suitable collection of \"fake\" labeled points (size zero and thus invisible):\n\n\n```python", "start_char_idx": 2, "end_char_idx": 2689, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8e9b8ec8-0bf0-40e3-a001-bf0a490021b3": {"__data__": {"id_": "8e9b8ec8-0bf0-40e3-a001-bf0a490021b3", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cb571722-6937-45ae-b819-2eedb2d797ca", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "05733f27883c40555721b507025332a96c3fccf172c99eba1a3e0ed4bc057b4a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3123b027-a01b-4d29-89db-64a15d5dac10", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5db212d1e7adc879798646f1780158c1b82f701adc78b7f383958e8194b2df79", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "026a483e-4c1e-4523-91e8-856de90e8d8a", "node_type": "1", "metadata": {}, "hash": "995d02c4c2df9fa92430ef43da79385544d78848a13ef81c47c23ecb92d3b9d9", "class_name": "RelatedNodeInfo"}}, "hash": "64bf4168a46a2d133899c00a20abbb5fb52c3fd4c60eaa41637f325fb868398d", "text": "definition copied here to ensure independent pan/zoom state for each dynamic plot\ngaussspread2 = dynspread(datashade(hv.NdOverlay(gaussians, kdims=['k']), aggregator=ds.by('k', ds.count())))\n\nfrom datashader.colors import Sets1to3 # default datashade() and shade() color cycle\ncolor_key = list(enumerate(Sets1to3[0:num_ks]))\ncolor_points = hv.NdOverlay({k: hv.Points([(0,0)], label=str(k)).opts(color=v, size=0) for k, v in color_key})\n\n(color_points * gaussspread2).opts(width=600)\n```\n\nHere the dummy points are at (0,0) for this dataset, but would need to be at another suitable value for data that is in a different range.", "start_char_idx": 2, "end_char_idx": 628, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "026a483e-4c1e-4523-91e8-856de90e8d8a": {"__data__": {"id_": "026a483e-4c1e-4523-91e8-856de90e8d8a", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f58188bd-0b82-400b-8891-553261a31bc2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e89095146bd441f32ba0a98f562628f24b90f718e02958991ceec98f86d9d564", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8e9b8ec8-0bf0-40e3-a001-bf0a490021b3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "64bf4168a46a2d133899c00a20abbb5fb52c3fd4c60eaa41637f325fb868398d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fa00c477-6750-4dcb-ad03-b951ab8859d3", "node_type": "1", "metadata": {}, "hash": "27a6bf90026a8fd0b60f684425e0366cf6a9e424ecc55c81faf6d5c69d67717c", "class_name": "RelatedNodeInfo"}}, "hash": "995d02c4c2df9fa92430ef43da79385544d78848a13ef81c47c23ecb92d3b9d9", "text": "Working with time series\n\nHoloViews also makes it possible to datashade large timeseries using the ``datashade`` and ``rasterize`` operations. For smoother lines, datashader implements anti-aliasing if a `line_width` > 0 is set:\n\n\n```python\ndates = pd.date_range(start=\"2014-01-01\", end=\"2016-01-01\", freq='1D') # or '1min'\ncurve = hv.Curve((dates, time_series(N=len(dates), sigma = 1)))\nrasterize(curve, width=800, line_width=3, pixel_ratio=2).opts(width=800, cmap=['lightblue','blue'])\n```\n\nHere we're also doubling the resolution in x and y using `pixel_ratio=2`, allowing for more precise rendering of the line shape; higher pixel ratios work well for lines and other shapes, though they can make individual points more difficult to see in points plots.\n\nHoloViews also supplies some operations that are useful in combination with Datashader timeseries. For instance, you can compute a rolling mean of the results and then show a subset of outlier points, which will then support hover, selection, and other interactive Bokeh features:\n\n\n```python\nfrom holoviews.operation.timeseries import rolling, rolling_outlier_std\nsmoothed = rolling(curve, rolling_window=50)\noutliers = rolling_outlier_std(curve, rolling_window=50, sigma=2)\n\nds_curve = rasterize(curve, line_width=2.5, pixel_ratio=2).opts(cmap=[\"lightblue\",\"blue\"])\ncurvespread = rasterize(smoothed, line_width=6, pixel_ratio=2).opts(cmap=[\"pink\",\"red\"], width=800) \n\n(ds_curve * curvespread * outliers).opts(\n opts.Scatter(line_color=\"black\", fill_color=\"red\", size=10, tools=['hover', 'box_select'], width=800))\n```\n\nAnother option when working with time series is to downsample the data before plotting it. This can be done with `downsample1D`. Algorithms supported are `lttb` (Largest Triangle Three Buckets) and `nth` element. The two algorithm is overlaid on top of the original curve in the example below. \n\n\n```python\nfrom holoviews.operation.downsample import downsample1d\n\nlttb = downsample1d(curve)\nnth = downsample1d(curve, algorithm=\"nth\")\n\nlttb_com = (curve * lttb).opts(width=800, title=\"lttb comparison\")\nnth_com = (curve * nth).opts(width=800, title=\"nth comparison\")\n\n(lttb_com + nth_com).cols(1)\n```\n\nThe result of all these operations can be laid out, overlaid, selected, and sampled just like any other HoloViews element, letting you work naturally with even very large datasets.\n\nNote that the above plot will look blocky in a static export (such as on anaconda.org), because the exported version is generated without taking the size of the actual plot (using default height and width for Datashader) into account, whereas the live notebook automatically regenerates the plot to match the visible area on the page.", "start_char_idx": 2, "end_char_idx": 2706, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fa00c477-6750-4dcb-ad03-b951ab8859d3": {"__data__": {"id_": "fa00c477-6750-4dcb-ad03-b951ab8859d3", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "91d463a9-fd2c-44e9-bd1b-4d88f8599527", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "42f417755f0a910ac2b13ce4bb68f43cfbb174267f1229635e8e843c4c0eb202", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "026a483e-4c1e-4523-91e8-856de90e8d8a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "995d02c4c2df9fa92430ef43da79385544d78848a13ef81c47c23ecb92d3b9d9", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bb236bad-4be0-4547-af6c-1ff05d05b156", "node_type": "1", "metadata": {}, "hash": "497231065f28db71922fe62dc6e431f8e7325ddce3895a7359d0d7d77bd3fc0d", "class_name": "RelatedNodeInfo"}}, "hash": "27a6bf90026a8fd0b60f684425e0366cf6a9e424ecc55c81faf6d5c69d67717c", "text": "Element types supported for Datashading\n\nFundamentally, what Datashader does is to rasterize data, i.e., render a representation of it into a regularly gridded rectangular portion of a two-dimensional plane. Datashader natively supports six basic types of rasterization:\n\n- **points**: zero-dimensional objects aggregated by position alone, each point covering zero area in the plane and thus falling into exactly one grid cell of the resulting array (if the point is within the bounds being aggregated).\n- **line**: polyline/multiline objects (connected series of line segments), with each segment having a fixed length but either zero width (not antialiased) or a specified width, and crossing each grid cell at most once.\n- **area**: a region to fill either between the supplied y-values and the origin or between two supplied lines.\n- **trimesh**: irregularly spaced triangular grid, with each triangle covering a portion of the 2D plane and thus potentially crossing multiple grid cells (thus requiring interpolation/upsampling). Depending on the zoom level, a single pixel can also include multiple triangles, which then becomes similar to the `points` case (requiring aggregation/downsampling of all triangles covered by the pixel).\n- **raster**: an axis-aligned regularly gridded two-dimensional subregion of the plane, with each grid cell in the source data covering more than one grid cell in the output grid (requiring interpolation/upsampling), or with each grid cell in the output grid including contributions from more than one grid cell in the input grid (requiring aggregation/downsampling).\n- **quadmesh**: a recti-linear or curvi-linear mesh (like a raster, but allowing nonuniform spacing and coordinate mapping) where each quad can cover one or more cells in the output (requiring upsampling, currently only as nearest neighbor), or with each output grid cell including contributions from more than one input grid cell (requiring aggregation/downsampling).\n- **polygons**: arbitrary filled shapes in 2D space (bounded by a piecewise linear set of segments), optionally punctuated by similarly bounded internal holes.\n\nDatashader focuses on implementing those four cases very efficiently, and HoloViews in turn can use them to render a very large range of specific types of data:", "start_char_idx": 2, "end_char_idx": 2302, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bb236bad-4be0-4547-af6c-1ff05d05b156": {"__data__": {"id_": "bb236bad-4be0-4547-af6c-1ff05d05b156", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "22cbba2f-b3b7-44a9-bf02-131c2f796290", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1ec39ebbe3db4eee72c7b2d404cfe4a670eaadbe6ddb486b065d9cd675fd7672", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fa00c477-6750-4dcb-ad03-b951ab8859d3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "27a6bf90026a8fd0b60f684425e0366cf6a9e424ecc55c81faf6d5c69d67717c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a4c50c9c-77af-43ba-be31-377cab480847", "node_type": "1", "metadata": {}, "hash": "c0199243b7b638e1e3c1554a6117a4cde5ee2a27afd9b80209ddd056b2a878b4", "class_name": "RelatedNodeInfo"}}, "hash": "497231065f28db71922fe62dc6e431f8e7325ddce3895a7359d0d7d77bd3fc0d", "text": "Supported Elements\n\n- **points**: `hv.Nodes`, `hv.Points`, `hv.Scatter`\n- **line**: `hv.Contours`, `hv.Curve`, `hv.Path`, `hv.Graph`, `hv.EdgePaths`, `hv.Spikes`, `hv.Segments`\n- **area**: `hv.Area`, `hv.Rectangles`, `hv.Spread`\n- **raster**: `hv.Image`, `hv.HSV`, `hv.RGB`\n- **trimesh**: `hv.TriMesh`\n- **quadmesh**: `hv.QuadMesh`\n- **polygons**: `hv.Polygons`\n\nOther HoloViews elements *could* be supported, but do not currently have a useful datashaded representation:", "start_char_idx": 2, "end_char_idx": 473, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a4c50c9c-77af-43ba-be31-377cab480847": {"__data__": {"id_": "a4c50c9c-77af-43ba-be31-377cab480847", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "15165df8-7f27-4dfe-aa4c-f1f714746809", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "25e08344fe4663255276b0ed970fbe494da4e4f04da2457dc8bf37b742acd208", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bb236bad-4be0-4547-af6c-1ff05d05b156", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "497231065f28db71922fe62dc6e431f8e7325ddce3895a7359d0d7d77bd3fc0d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d378ee94-5968-461c-bd0b-bbe6c8149a40", "node_type": "1", "metadata": {}, "hash": "45714dbf931d383e68d90ae36c6ec32ed86e8b8fb2b5504809cffe5f2f18fe54", "class_name": "RelatedNodeInfo"}}, "hash": "c0199243b7b638e1e3c1554a6117a4cde5ee2a27afd9b80209ddd056b2a878b4", "text": "Elements not yet supported\n\n- **line**: `hv.Spline`, `hv.VectorField`\n- **raster**: `hv.HeatMap`, `hv.Raster`\n\nThere are also other Elements that are not expected to be useful with datashader because they are isolated annotations, are already summaries or aggregations of other data, have graphical representations that are only meaningful at a certain size, or are text based:", "start_char_idx": 2, "end_char_idx": 379, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d378ee94-5968-461c-bd0b-bbe6c8149a40": {"__data__": {"id_": "d378ee94-5968-461c-bd0b-bbe6c8149a40", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "adbd3cf2-bff3-45ce-a74a-d99627b7e497", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bd4dd77f1bac4b0809624967afc724216d65b29d8b354b1199976a12c5ad5536", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a4c50c9c-77af-43ba-be31-377cab480847", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c0199243b7b638e1e3c1554a6117a4cde5ee2a27afd9b80209ddd056b2a878b4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fdbd3f93-22cd-4f9f-8784-b70fcf177d37", "node_type": "1", "metadata": {}, "hash": "6368c9a19f161aa2ca006ea7131ee5dfdd9153c5bcff57dd9d7a24fc676a54d4", "class_name": "RelatedNodeInfo"}}, "hash": "45714dbf931d383e68d90ae36c6ec32ed86e8b8fb2b5504809cffe5f2f18fe54", "text": "Not useful to support\n\n- datashadable annotations: `hv.Arrow`, `hv.Bounds`, `hv.Box`, `hv.Ellipse` (actually do work with datashade currently, but not officially supported because they are not vectorized and thus unlikely to have enough items to be worth datashading)\n- other annotations: `hv.Labels`, `hv.HLine`, `hv.VLine`, `hv.Text`\n- kdes: `hv.Distribution`, `hv.Bivariate` (already aggregated)\n- categorical/symbolic: `hv.BoxWhisker`, `hv.Bars`, `hv.ErrorBars`\n- tables: `hv.Table`, `hv.ItemTable`\n\nLet's make some examples of each supported Element type. First, some dummy data:\n\n\n```python\nfrom bokeh.sampledata.unemployment import data as unemployment\nfrom bokeh.sampledata.us_counties import data as counties\n\nnp.random.seed(12)\nN=50\npts = [(10*i/N, np.sin(10*i/N)) for i in range(N)]\n\nx = y = np.linspace(0, 5, int(np.sqrt(N)))\nxs,ys = np.meshgrid(x,y)\nz = np.sin(xs)*np.cos(ys)\n\nr = 0.5*np.sin(0.1*xs**2+0.05*ys**2)+0.5\ng = 0.5*np.sin(0.02*xs**2+0.2*ys**2)+0.5\nb = 0.5*np.sin(0.02*xs**2+0.02*ys**2)+0.5\n\nn=20\ncoords = np.linspace(-1.5,1.5,n)\nX,Y = np.meshgrid(coords, coords);\nQx = np.cos(Y) - np.cos(X)\nQy = np.sin(Y) + np.sin(X)\nZ = np.sqrt(X**2 + Y**2)\n\nrect_colors = {True: 'red', False: 'green'}\ns = np.random.randn(100).cumsum()\ne = s + np.random.randn(100)\n```\n\nNext, some options:\n\n\n```python\nhv.output(backend='matplotlib')\n\nopts.defaults(opts.Layout(vspace=0.1, hspace=0.1, sublabel_format='', fig_size=48))\neopts = dict(aspect=1, axiswise=True, xaxis='bare', yaxis='bare', xticks=False, yticks=False)\nopts2 = dict(filled=True, edge_color='z')\nrect_opts = opts.Rectangles(lw=0, color=hv.dim('sign').categorize(rect_colors))\nds_point_opts = dict(aggregator='any')\nds_line_opts = dict(aggregator='any', line_width=1)\nResampleOperation2D.width=115\nResampleOperation2D.height=115\n\nds_opts = {\n hv.Path: ds_line_opts,\n hv.Graph: ds_line_opts,\n hv.Contours: ds_line_opts,\n hv.EdgePaths: ds_line_opts,\n hv.Curve: ds_line_opts,\n hv.Scatter: ds_point_opts,\n hv.Points: ds_point_opts,\n hv.Segments: ds_point_opts,\n hv.Rectangles: dict(aggregator=ds.count_cat('sign'), color_key=rect_colors)\n}\n```\n\nNow, some Elements that support datashading, in categories depending on whether they work best with `spread(rasterize())`, with plain `rasterize()`, or require `datashade()`:", "start_char_idx": 2, "end_char_idx": 2341, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fdbd3f93-22cd-4f9f-8784-b70fcf177d37": {"__data__": {"id_": "fdbd3f93-22cd-4f9f-8784-b70fcf177d37", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "adbd3cf2-bff3-45ce-a74a-d99627b7e497", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bd4dd77f1bac4b0809624967afc724216d65b29d8b354b1199976a12c5ad5536", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d378ee94-5968-461c-bd0b-bbe6c8149a40", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "45714dbf931d383e68d90ae36c6ec32ed86e8b8fb2b5504809cffe5f2f18fe54", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dd504638-2fab-4fa8-bdb8-d2efccf871a8", "node_type": "1", "metadata": {}, "hash": "bf6fc2cd6614ac446da10ea48b3cd4e98e001656d4eb73aec38e295e57b20f50", "class_name": "RelatedNodeInfo"}}, "hash": "6368c9a19f161aa2ca006ea7131ee5dfdd9153c5bcff57dd9d7a24fc676a54d4", "text": "```python\ntri = hv.TriMesh.from_vertices(hv.Points(np.random.randn(N,3), vdims='z')).opts(**opts2)\n\nrasterizable = [hv.Curve(pts)]\nrasterizable += [hv.operation.contours(hv.Image((x,y,z)), levels=10)]\nrasterizable += [hv.Area(np.random.randn(10000).cumsum())]\nrasterizable += [hv.Spread((np.arange(10000), np.random.randn(10000).cumsum(), np.random.randn(10000)*10))]\nrasterizable += [hv.Spikes(np.random.randn(1000))]\nrasterizable += [hv.Graph(((np.zeros(N//2), np.arange(N//2)),))]\nrasterizable += [hv.QuadMesh((Qx,Qy,Z))]\nrasterizable += [hv.Image((x,y,z))]\nrasterizable += [hv.RGB(np.dstack([r,g,b])), hv.HSV(np.dstack([g,b,r]))]\nrasterizable += [tri, tri.edgepaths]\nrasterizable += [hv.Path(counties[(1, 1)], ['lons', 'lats'])]\n\npolys = hv.Polygons([dict(county, unemployment=unemployment[k]) \n for k, county in counties.items()\n if county['state'] == 'tx'], \n ['lons', 'lats'], ['unemployment']).opts(color='unemployment')\ntry:\n import spatialpandas # Needed for datashader polygon support\n rasterizable += [polys]\nexcept: pass\n\nspreadable = [e(pts) for e in [hv.Scatter]]\nspreadable += [hv.Points(counties[(1, 1)], ['lons', 'lats'])]\nspreadable += [hv.Segments((np.arange(100), s, np.arange(100), e))]\n\nshadeable = [hv.Rectangles((np.arange(100)-0.4, s, np.arange(100)+0.4, e, s>e), vdims='sign').opts(rect_opts)]\n```\n\nWe can now view these with Datashader via `spread(rasterize())`, `rasterize()`, or `datashade()`:\n\n\n```python\ndef nop(x,**k): return x\ndef spread2(e, **k): return spread(rasterize(e, **k), px=2).opts(cnorm='eq_hist', padding=0.1) \ndef plot(e, operation=nop):\n return operation(e.relabel(e.__class__.name), **ds_opts.get(e.__class__, {})).opts(**eopts)\n\nhv.Layout(\n [plot(e, rasterize) for e in rasterizable] + \\\n [plot(e, spread2) for e in spreadable] + \\\n [plot(e, datashade) for e in shadeable]).cols(6)\n```\n\nFor comparison, you can see the corresponding non-datashaded plots (as long as you leave N lower than 10000 unless you have a long time to wait!):\n\n\n```python\nhv.Layout([plot(e) for e in rasterizable + spreadable + shadeable]).cols(6)\n```\n\nThe previous two sets of examples use Matplotlib, but if they were switched to Bokeh and you had a live server, they would support dynamic re-rendering on zoom and pan so that you could explore the full range of data available (e.g. even very large raster images, networks, paths, point clouds, or meshes).\n\n\n```python\nhv.output(backend='bokeh') # restore bokeh backend in case cells will run out of order\n```", "start_char_idx": 2344, "end_char_idx": 4917, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dd504638-2fab-4fa8-bdb8-d2efccf871a8": {"__data__": {"id_": "dd504638-2fab-4fa8-bdb8-d2efccf871a8", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "12d29cff-4ce9-47b1-8fed-4c3f79929306", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "68599ec4d90a9d59b54a9dcc424eb2f2c5f517b97e97d37335239ffd18d3ed1f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fdbd3f93-22cd-4f9f-8784-b70fcf177d37", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6368c9a19f161aa2ca006ea7131ee5dfdd9153c5bcff57dd9d7a24fc676a54d4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "56df7fea-b4b8-4ed8-8d8f-4233f2768bc2", "node_type": "1", "metadata": {}, "hash": "c8d37261d573f1df6f59386d1d2dddf4f55507219372f9c862d06c78e9d69016", "class_name": "RelatedNodeInfo"}}, "hash": "bf6fc2cd6614ac446da10ea48b3cd4e98e001656d4eb73aec38e295e57b20f50", "text": "Container types supported for datashading\n\nIn the above examples `datashade()` or `rasterize` was called directly on each Element, but these operations can also be called on Containers, in which case each Element in the Container will be datashaded separately (for all Container types other than a Layout):\n\n\n```python\ncurves = {'+':hv.Curve(pts), '-':hv.Curve([(x, -1.0*y) for x, y in pts])}\nrasterize(hv.HoloMap(curves,'sign'), line_width=3)\n```\n\n\n```python\nrasterize(hv.NdLayout(curves,'sign'), line_width=3)\n```\n\n\n```python\ncontainers = [hv.Overlay(list(curves.values())), hv.NdOverlay(curves), hv.GridSpace(hv.NdOverlay(curves))]\nhv.Layout([rasterize(e.relabel(e.__class__.name), line_width=3) for e in containers]).cols(3)\n```", "start_char_idx": 2, "end_char_idx": 734, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "56df7fea-b4b8-4ed8-8d8f-4233f2768bc2": {"__data__": {"id_": "56df7fea-b4b8-4ed8-8d8f-4233f2768bc2", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d59f6c63-0c66-4f1c-b76e-090a232c54b8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a4a70a9db04a0456027a09ae5431f35e86a70b81c7f37bb48bec61e5dcaf7c29", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dd504638-2fab-4fa8-bdb8-d2efccf871a8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bf6fc2cd6614ac446da10ea48b3cd4e98e001656d4eb73aec38e295e57b20f50", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a4ad58fa-56d8-4a18-b4c6-efa7661591c9", "node_type": "1", "metadata": {}, "hash": "561ad24a201e661798e2f6f6a6f8cbf48524309e95ba6fa53729d478899eea91", "class_name": "RelatedNodeInfo"}}, "hash": "c8d37261d573f1df6f59386d1d2dddf4f55507219372f9c862d06c78e9d69016", "text": "Optimizing performance\n\nDatashader and HoloViews have different design principles that are worth keeping in mind when using them in combination, if you want to ensure good overall performance. By design, Datashader supports only a small number of operations and datatypes, focusing only on what can be implemented very efficiently. HoloViews instead focuses on supporting the typical workflows of Python users, recognizing that the most computationally efficient choice is only going to be faster overall if it also minimizes the time users have to spend getting things working. \n\nHoloViews thus helps you get something working quickly, but once it is working and you realize that you need to do this often or that it comes up against the limits of your computing hardware, you can consider whether you can get much better performance by considering the following issues and suggestions.", "start_char_idx": 2, "end_char_idx": 890, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a4ad58fa-56d8-4a18-b4c6-efa7661591c9": {"__data__": {"id_": "a4ad58fa-56d8-4a18-b4c6-efa7661591c9", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "885eb6a5-cb49-4570-965d-f6b58e0c0fe2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4f3c9f4db71ad7c83370ba62976f6672f861b5828ea79159ce84e1548aa87968", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "56df7fea-b4b8-4ed8-8d8f-4233f2768bc2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c8d37261d573f1df6f59386d1d2dddf4f55507219372f9c862d06c78e9d69016", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f93767b1-edf4-46f5-8582-b48ae030b7fe", "node_type": "1", "metadata": {}, "hash": "6699ff70abc757a28edb84756e9569bfa0aadec9e3cac75277cfb2c9d93e396f", "class_name": "RelatedNodeInfo"}}, "hash": "561ad24a201e661798e2f6f6a6f8cbf48524309e95ba6fa53729d478899eea91", "text": "Use a Datashader-supported data structure\n\nHoloViews helpfully tries to convert whatever data you have provided into what Datashader supports, which is good for optimizing your time to an initial solution, but will not always be the fastest approach computationally. If you ensure that you store your data in a format that Datashader understands already, HoloViews can simply pass it down to Datashader without copying or transforming it:\n\n1. For point, line, and trimesh data, Datashader supports Dask and Pandas dataframes, and so those two data sources will be fastest. Of those two, Dask Dataframes will usually be somewhat faster and also able to make use of distributed computational resources and out-of-core processing.\n2. For rasters and quadmeshes, Datashader supports xarray objects natively, and so if your data is provided as an xarray already, plotting will be faster.\n3. For polygons Datashader supports spatialpandas DataFrames.\n\nSee the Datashader docs for examples of dealing with even quite large datasets (in the billions of points) on commodity hardware, including many HoloViews-based examples.", "start_char_idx": 2, "end_char_idx": 1119, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f93767b1-edf4-46f5-8582-b48ae030b7fe": {"__data__": {"id_": "f93767b1-edf4-46f5-8582-b48ae030b7fe", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "90cc1b54-f4bd-48e1-8a41-51ca9793e45a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1ec586e15f726b2f10cc8695f075e05d660f45a9db08e4c0d05acac737d620fe", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a4ad58fa-56d8-4a18-b4c6-efa7661591c9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "561ad24a201e661798e2f6f6a6f8cbf48524309e95ba6fa53729d478899eea91", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bd69d87d-a665-4482-96e7-253d5b7043b5", "node_type": "1", "metadata": {}, "hash": "14a63daebd6455945075bd9ecfd30984fc3a141cb738260eae9bb502759eb1bc", "class_name": "RelatedNodeInfo"}}, "hash": "6699ff70abc757a28edb84756e9569bfa0aadec9e3cac75277cfb2c9d93e396f", "text": "Cache initial processing with `precompute=True`\n\nIn the typical case of having datasets much larger than the plot resolution, HoloViews Datashader-based operations that work on the full dataset (`rasterize`, `aggregate`,`regrid`) are computationally expensive; the others are not (`shade`, `spread`, `dynspread`, etc.) \n\nThe expensive operations are all of type `ResamplingOperation`, which has a parameter `precompute` (see `hv.help(hv.operation.datashader.rasterize)`, etc.) Precompute can be used to get faster performance in interactive usage by caching the last set of data used in plotting (*after* any transformations needed) and reusing it when it is requested again. This is particularly useful when your data is not in one of the supported data formats already and needs to be converted. `precompute` is False by default, because it requires using memory to store the cached data, but if you have enough memory, you can enable it so that repeated interactions (such as zooming and panning) will be much faster than the first one. In practice, most Datashader-plots don't need to do extensive precomputing, but enabling it for TriMesh and Polygon plots can greatly speed up interactive usage.", "start_char_idx": 2, "end_char_idx": 1205, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bd69d87d-a665-4482-96e7-253d5b7043b5": {"__data__": {"id_": "bd69d87d-a665-4482-96e7-253d5b7043b5", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "660ee9aa-b5f6-4e85-b3c7-eac50414cf86", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b4be66f4800ac26011451656b0487cbdef842a04b9eb222ce48a9ea900198e05", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f93767b1-edf4-46f5-8582-b48ae030b7fe", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6699ff70abc757a28edb84756e9569bfa0aadec9e3cac75277cfb2c9d93e396f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "960a400d-4c71-4ec5-aacd-4fbf83d9fc79", "node_type": "1", "metadata": {}, "hash": "71b45b760716df5af2444cb0e02df6f8576578fa8d2795bc4756f10df5760d62", "class_name": "RelatedNodeInfo"}}, "hash": "14a63daebd6455945075bd9ecfd30984fc3a141cb738260eae9bb502759eb1bc", "text": "Use GPU support\n\nMany elements now also support aggregation directly on a GPU-based datastructure such as a cuDF DataFrame or an Xarray DataArray backed by a cupy array. These data structures can be passed directly to the appropriate HoloViews elements just as you would use a Pandas or other Xarray object. For instance, a cuDF can be used on elements like `hv.Points` and `hv.Curve`, while a cupy-backed DataArray raster or quadmesh can be passed to `hv.QuadMesh` elements. When used with Datashader, the GPU implementation can result in 10-100x speedups, as well as avoiding having to transfer the data out of the GPU for plotting (sending only the final rendered plot out of the GPU's memory). To see which HoloViews elements are supported, see the datashader performance guide. As of the Datashader 0.11 release, all point, line, area, and quadmesh aggregations are supported when using a GPU backed datastructure, including raster objects like `hv.Image` if first converted to `hv.Quadmesh`.", "start_char_idx": 2, "end_char_idx": 999, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "960a400d-4c71-4ec5-aacd-4fbf83d9fc79": {"__data__": {"id_": "960a400d-4c71-4ec5-aacd-4fbf83d9fc79", "embedding": null, "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e8cc0203-f572-4d50-8bb9-97d9a246dfae", "node_type": "4", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5c2f16c84ea240330439a5df08ca4dc7d411a2c1b427f3e27e5dd395e3dc9aea", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bd69d87d-a665-4482-96e7-253d5b7043b5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "14a63daebd6455945075bd9ecfd30984fc3a141cb738260eae9bb502759eb1bc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "36bc9bdd-14cf-437c-b202-80bb294c0b85", "node_type": "1", "metadata": {}, "hash": "7a18a27c3ebe52df521703192cef7f769280963214840ea0236206aaa02aa45e", "class_name": "RelatedNodeInfo"}}, "hash": "71b45b760716df5af2444cb0e02df6f8576578fa8d2795bc4756f10df5760d62", "text": "Project data only once\n\nIf you are working with geographic data using GeoViews that needs to be projected before display and/or before datashading, GeoViews will have to do this every time you update a plot, which can drown out the performance improvement you get by using Datashader. GeoViews allows you to project the entire dataset at once using `gv.operation.project`, and once you do this you should be able to use Datashader at full speed.\n\nIf you follow these suggestions, the combination of HoloViews and Datashader will allow you to work uniformly with data covering a huge range of sizes. Per session or per plot, you can trade off the ability to export user-manipulable plots against file size and browser compatibility, and allowing you to render even the largest dataset faithfully. HoloViews makes the full power of Datashader available in just a few lines of code, giving you a natural way to work with your data regardless of its size.", "start_char_idx": 2, "end_char_idx": 954, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "36bc9bdd-14cf-437c-b202-80bb294c0b85": {"__data__": {"id_": "36bc9bdd-14cf-437c-b202-80bb294c0b85", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e890f3b4-5613-45cb-82d1-c55b0c04a968", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e195274c100b6366977ab5eaafaf11a926c476fa430a0fe20eec3a4bb9cc871e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "960a400d-4c71-4ec5-aacd-4fbf83d9fc79", "node_type": "1", "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "71b45b760716df5af2444cb0e02df6f8576578fa8d2795bc4756f10df5760d62", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e0ded539-ee3e-4e51-a1cc-f752db8e7289", "node_type": "1", "metadata": {}, "hash": "0ec0f9b84bc08e7f75a633da7e7a0fe37abe658917059c4a34d545e3fe84cbfb", "class_name": "RelatedNodeInfo"}}, "hash": "7a18a27c3ebe52df521703192cef7f769280963214840ea0236206aaa02aa45e", "text": "Working with Streaming Data\n\n\"Streaming data\" is data that is continuously generated, often by some external source like a remote website, a measuring device, or a simulator. This kind of data is common for financial time series, web server logs, scientific applications, and many other situations. We have seen how to visualize any data output by a callable in the Live Data user guide and we have also seen how to use the HoloViews stream system to push events in the user guide sections Responding to Events and Custom Interactivity.\n\nThis user guide shows a third way of building an interactive plot, using ``DynamicMap`` and streams. Here, instead of pushing plot metadata (such as zoom ranges, user triggered events such as ``Tap`` and so on) to a ``DynamicMap`` callback, the underlying data in the visualized elements are updated directly using a HoloViews ``Stream``.\n\nIn particular, we will show how the HoloViews ``Pipe`` and ``Buffer`` streams can be used to work with streaming data sources without having to fetch or generate the data from inside the ``DynamicMap`` callable. Apart from simply setting element data from outside a ``DynamicMap``, we will also explore ways of working with streaming data coordinated by the separate ``streamz`` library from Matt Rocklin, which can make building complex streaming pipelines much simpler.\n\nAs this notebook makes use of the ``streamz`` library, you will need to install it with ``conda install streamz`` or ``pip install streamz``.\n\n\n```python\nimport time\nimport numpy as np\nimport pandas as pd\nimport holoviews as hv\nimport streamz\nimport streamz.dataframe\n\nfrom holoviews import opts\nfrom holoviews.streams import Pipe, Buffer\n\nhv.extension('bokeh')\n```", "start_char_idx": 2, "end_char_idx": 1719, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e0ded539-ee3e-4e51-a1cc-f752db8e7289": {"__data__": {"id_": "e0ded539-ee3e-4e51-a1cc-f752db8e7289", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "507d2f32-d2b1-4fcc-b0bd-7b53ffb2970c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "475b103454381aac1e9d07a448fd913cedff014266842cc10b1744ea5418165a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "36bc9bdd-14cf-437c-b202-80bb294c0b85", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7a18a27c3ebe52df521703192cef7f769280963214840ea0236206aaa02aa45e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ad2b92df-44f4-4b32-9452-9e2b5626c703", "node_type": "1", "metadata": {}, "hash": "53b5583d0b5237d2089044db9e15f223894175b464a44925eddcf4810bff97f0", "class_name": "RelatedNodeInfo"}}, "hash": "0ec0f9b84bc08e7f75a633da7e7a0fe37abe658917059c4a34d545e3fe84cbfb", "text": "``Pipe``\n\nA ``Pipe`` allows data to be pushed into a DynamicMap callback to change a visualization, just like the streams in the Responding to Events user guide were used to push changes to metadata that controlled the visualization. A ``Pipe`` can be used to push data of any type and make it available to a ``DynamicMap`` callback. Since all ``Element`` types accept ``data`` of various forms we can use ``Pipe`` to push data directly to the constructor of an ``Element`` through a DynamicMap.\n\n\nWe can take advantage of the fact that most Elements can be instantiated without providing any data, so we declare the the ``Pipe`` with an empty list, declare the ``DynamicMap``, providing the pipe as a stream, which will dynamically update a ``VectorField`` :\n\n\n```python\npipe = Pipe(data=[])\nvector_dmap = hv.DynamicMap(hv.VectorField, streams=[pipe])\nvector_dmap.opts(color='Magnitude', xlim=(-1, 1), ylim=(-1, 1))\n```\n\n\n\nHaving set up this ``VectorField`` tied to a ``Pipe`` we can start pushing data to it varying the orientation of the VectorField:\n\n\n```python\nx,y = np.mgrid[-10:11,-10:11] * 0.1\nsine_rings = np.sin(x**2+y**2)*np.pi+np.pi\nexp_falloff = 1/np.exp((x**2+y**2)/8)\n\nfor i in np.linspace(0, 1, 25):\n time.sleep(0.1)\n pipe.send((x,y,sine_rings*i, exp_falloff))\n```\n\nThis approach of using an element constructor directly does not allow you to use anything other than the default key and value dimensions. One simple workaround for this limitation is to use ``functools.partial`` as demonstrated in the **Controlling the length section** below.\n\nSince ``Pipe`` is completely general and the data can be any custom type, it provides a completely general mechanism to stream structured or unstructured data. Due to this generality, ``Pipe`` does not offer some of the more complex features and optimizations available when using the ``Buffer`` stream described in the next section.", "start_char_idx": 2, "end_char_idx": 1904, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ad2b92df-44f4-4b32-9452-9e2b5626c703": {"__data__": {"id_": "ad2b92df-44f4-4b32-9452-9e2b5626c703", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6a1e86a9-de6b-4069-8542-120f11210412", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9751b4586b0dbb75f258c9fa7824d60c4129ba0d4eeefc97ef029ab2f446d573", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e0ded539-ee3e-4e51-a1cc-f752db8e7289", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0ec0f9b84bc08e7f75a633da7e7a0fe37abe658917059c4a34d545e3fe84cbfb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "489014bf-d915-4db9-9fd0-545bb7056f47", "node_type": "1", "metadata": {}, "hash": "a70ec2459ea74896c96f054a265c1d35037fad5af0a49a57928818f6a435aa4c", "class_name": "RelatedNodeInfo"}}, "hash": "53b5583d0b5237d2089044db9e15f223894175b464a44925eddcf4810bff97f0", "text": "``Buffer``\n\nWhile ``Pipe`` provides a general solution for piping arbitrary data to ``DynamicMap`` callback, ``Buffer`` on the other hand provides a very powerful means of working with streaming tabular data, defined as pandas dataframes, arrays or dictionaries of columns (as well as StreamingDataFrame, which we will cover later). ``Buffer`` automatically accumulates the last ``N`` rows of the tabular data, where ``N`` is defined by the ``length``.\n\nThe ability to accumulate data allows performing operations on a recent history of data, while plotting backends (such as bokeh) can optimize plot updates by sending just the latest patch. This optimization works only if the ``data`` object held by the ``Buffer`` is identical to the plotted ``Element`` data, otherwise all the data will be updated as normal.", "start_char_idx": 2, "end_char_idx": 816, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "489014bf-d915-4db9-9fd0-545bb7056f47": {"__data__": {"id_": "489014bf-d915-4db9-9fd0-545bb7056f47", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "60c723ba-fed2-401a-bcf1-62bb55609cee", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "387def27127782c1662e2b1665089a674ddd285f26588f2497b84ecc92d95cd7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ad2b92df-44f4-4b32-9452-9e2b5626c703", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "53b5583d0b5237d2089044db9e15f223894175b464a44925eddcf4810bff97f0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5173568c-25c4-4425-b4d4-ad7f7a0a9cc9", "node_type": "1", "metadata": {}, "hash": "69b30792df9aaa495a10344ba148d8c98a86d7cc2aef17aeb3ac5308fee7532b", "class_name": "RelatedNodeInfo"}}, "hash": "a70ec2459ea74896c96f054a265c1d35037fad5af0a49a57928818f6a435aa4c", "text": "A simple example: Brownian motion\n\nTo initialize a ``Buffer`` we have to provide an example dataset which defines the columns and dtypes of the data we will be streaming. Next we define the ``length`` to keep the last 100 rows of data. If the data is a DataFrame we can specify whether we will also want to use the ``DataFrame`` ``index``. In this case we will simply define that we want to plot a ``DataFrame`` of 'x' and 'y' positions and a 'count' as ``Points`` and ``Curve`` elements:\n\n\n```python\nexample = pd.DataFrame({'x': [], 'y': [], 'count': []}, columns=['x', 'y', 'count'])\ndfstream = Buffer(example, length=100, index=False)\ncurve_dmap = hv.DynamicMap(hv.Curve, streams=[dfstream])\npoint_dmap = hv.DynamicMap(hv.Points, streams=[dfstream])\n```\n\nAfter applying some styling we will display an ``Overlay`` of the dynamic ``Curve`` and ``Points``\n\n\n```python\n(curve_dmap * point_dmap).opts(\n opts.Points(color='count', line_color='black', size=5, padding=0.1, xaxis=None, yaxis=None),\n opts.Curve(line_width=1, color='black'))\n```\n\n\n\nNow that we have set up the ``Buffer`` and defined a ``DynamicMap`` to plot the data we can start pushing data to it. We will define a simple function which simulates brownian motion by accumulating x, y positions. We can ``send`` data through the ``hv.streams.Buffer`` directly.\n\n\n```python\ndef gen_brownian():\n x, y, count = 0, 0, 0\n while True:\n x += np.random.randn()\n y += np.random.randn()\n count += 1\n yield pd.DataFrame([(x, y, count)], columns=['x', 'y', 'count'])\n\nbrownian = gen_brownian()\nfor i in range(200):\n dfstream.send(next(brownian))\n```\n\nFinally we can clear the data on the stream and plot using the ``clear`` method:\n\n\n```python\ndfstream.clear()\n```\n\nNote that when using the ``Buffer`` stream the view will always follow the current range of the data by default, by setting ``buffer.following=False`` or passing following as an argument to the constructor this behavior may be disabled.", "start_char_idx": 2, "end_char_idx": 1998, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5173568c-25c4-4425-b4d4-ad7f7a0a9cc9": {"__data__": {"id_": "5173568c-25c4-4425-b4d4-ad7f7a0a9cc9", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "32f6e827-830c-4d6f-987e-c3dc65257bfd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6e0b25205e1adb014a8c944239bde219c6710067a80a1654c99e69df91d8db3b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "489014bf-d915-4db9-9fd0-545bb7056f47", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a70ec2459ea74896c96f054a265c1d35037fad5af0a49a57928818f6a435aa4c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fe1c7718-9023-462a-a7a3-ff79ff08e185", "node_type": "1", "metadata": {}, "hash": "d72e2eb6ac949d9c1b54248a7ca5c7a725175a866707b7d7eff4aeafefe4d4ee", "class_name": "RelatedNodeInfo"}}, "hash": "69b30792df9aaa495a10344ba148d8c98a86d7cc2aef17aeb3ac5308fee7532b", "text": "Using the Streamz library\n\nNow that we have discovered what ``Pipe`` and ``Buffer`` can do it's time to show how you can use them together with the ``streamz`` library. Although HoloViews does not depend on ``streamz`` and you can use the streaming functionality without needing to learn about it, the two libraries work well together, allowing you to build pipelines to manage continuous streams of data. Streamz is easy to use for simple tasks, but also supports complex pipelines that involve branching, joining, flow control, feedback and more. Here we will mostly focus on connecting streamz output to ``Pipe`` and then ``Buffer`` so for more details about the streamz API, consult the streamz documentation.", "start_char_idx": 2, "end_char_idx": 715, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fe1c7718-9023-462a-a7a3-ff79ff08e185": {"__data__": {"id_": "fe1c7718-9023-462a-a7a3-ff79ff08e185", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "43977066-e126-4ed7-a320-b760ed17389d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "287e83d3f280e4ac76efa3bc07e2416e1fb3706c39fb6401471294907a50552a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5173568c-25c4-4425-b4d4-ad7f7a0a9cc9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "69b30792df9aaa495a10344ba148d8c98a86d7cc2aef17aeb3ac5308fee7532b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c856e5c5-504a-4bfe-8cda-e3d40dffc7bd", "node_type": "1", "metadata": {}, "hash": "7f0043d71632af9a3dd2a5e5287e9dba4aaaf3b816c9c09aa5c5fffaa1573a93", "class_name": "RelatedNodeInfo"}}, "hash": "d72e2eb6ac949d9c1b54248a7ca5c7a725175a866707b7d7eff4aeafefe4d4ee", "text": "Using ``streamz.Stream`` together with ``Pipe``\n\nLet's start with a fairly simple example:\n\n1. Declare a ``streamz.Stream`` and a ``Pipe`` object and connect them into a pipeline into which we can push data. \n2. Use a ``sliding_window`` of 10, which will first wait for 10 sets of stream updates to accumulate. At that point and for every subsequent update, it will apply ``pd.concat`` to combine the most recent 10 updates into a new dataframe.\n3. Use the ``sink`` method on the ``streamz.Stream`` to ``send`` the resulting collection of 10 updates to ``Pipe``.\n4. Declare a ``DynamicMap`` that takes the sliding window of concatenated DataFrames and displays it using a ``Scatter`` Element.\n5. Color the ``Scatter`` points by their 'count' and set a range, then display:\n\n\n```python\npoint_source = streamz.Stream()\npipe = Pipe(data=pd.DataFrame({'x': [], 'y': [], 'count': []}))\npoint_source.sliding_window(20).map(pd.concat).sink(pipe.send) # Connect streamz to the Pipe\nscatter_dmap = hv.DynamicMap(hv.Scatter, streams=[pipe])\n```\n\nAfter set up our streaming pipeline we can again display it:\n\n\n```python\nscatter_dmap.opts(bgcolor='black', color='count', ylim=(-4, 4), show_legend=False)\n```\n\n\n\nThere is now a pipeline, but initially this plot will be empty, because no data has been sent to it. To see the plot update, let's use the ``emit`` method of ``streamz.Stream`` to send small chunks of random pandas ``DataFrame``s to our plot:\n\n\n```python\nfor i in range(100):\n df = pd.DataFrame({'x': np.random.rand(100), 'y': np.random.randn(100), 'count': i},\n columns=['x', 'y', 'count'])\n point_source.emit(df)\n```", "start_char_idx": 2, "end_char_idx": 1646, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c856e5c5-504a-4bfe-8cda-e3d40dffc7bd": {"__data__": {"id_": "c856e5c5-504a-4bfe-8cda-e3d40dffc7bd", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e0cc119f-5241-4982-a059-f6f6ad9e4665", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "159fbc1311f4d58664e7b67541c8ffd46db8c3868681c23c7847eaf740bf4665", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fe1c7718-9023-462a-a7a3-ff79ff08e185", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d72e2eb6ac949d9c1b54248a7ca5c7a725175a866707b7d7eff4aeafefe4d4ee", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d6a5f038-fba0-4770-8748-85c8de7ec4bf", "node_type": "1", "metadata": {}, "hash": "cadf21c25a2529dca9b8301a55cf483b779db48a185b74def4630204f7fb8319", "class_name": "RelatedNodeInfo"}}, "hash": "7f0043d71632af9a3dd2a5e5287e9dba4aaaf3b816c9c09aa5c5fffaa1573a93", "text": "Using StreamingDataFrame and StreamingSeries\n\nThe streamz library provides ``StreamingDataFrame`` and ``StreamingSeries`` as a powerful way to easily work with live sources of tabular data. This makes it perfectly suited to work with ``Buffer``. With the ``StreamingDataFrame`` we can easily stream data, apply computations such as cumulative and rolling statistics and then visualize the data with HoloViews.\n\nThe ``streamz.dataframe`` module provides a ``Random`` utility that generates a ``StreamingDataFrame`` that emits random data with a certain frequency at a specified interval. The ``example`` attribute lets us see the structure and dtypes of the data we can expect:\n\n\n```python\nsimple_sdf = streamz.dataframe.Random(freq='10ms', interval='100ms')\nprint(simple_sdf.index)\nsimple_sdf.example.dtypes\n```\n\nSince the ``StreamingDataFrame`` provides a pandas-like API, we can specify operations on the data directly. In this example we subtract a fixed offset and then compute the cumulative sum, giving us a randomly drifting timeseries. We can then pass the x-values of this dataframe to the HoloViews ``Buffer`` and supply ``hv.Curve`` as the ``DynamicMap`` callback to stream the data into a HoloViews ``Curve`` (with the default key and value dimensions):\n\n\n```python\nsdf = (simple_sdf-0.5).cumsum()\nhv.DynamicMap(hv.Curve, streams=[Buffer(sdf.x)]).opts(width=500, show_grid=True)\n```\n\n\n\nThe ``Random`` StreamingDataFrame will asynchronously emit events, driving the visualization forward, until it is explicitly stopped, which we can do by calling the ``stop`` method.\n\n\n```python\nsimple_sdf.stop()\n```", "start_char_idx": 2, "end_char_idx": 1615, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d6a5f038-fba0-4770-8748-85c8de7ec4bf": {"__data__": {"id_": "d6a5f038-fba0-4770-8748-85c8de7ec4bf", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5c8e909d-0d38-4262-b732-0c16f4ad2d7f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "af2ee4b83760a3a8bd936fe1afa161089f12fd69d866c2569902e354a6faaaa5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c856e5c5-504a-4bfe-8cda-e3d40dffc7bd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7f0043d71632af9a3dd2a5e5287e9dba4aaaf3b816c9c09aa5c5fffaa1573a93", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1338489e-8a26-4fac-8a57-3a7fd1ca0650", "node_type": "1", "metadata": {}, "hash": "27844fcdb5b5f54d11d1c66502ea44d82e4bae29c7be877f5aa585a4d9b4e241", "class_name": "RelatedNodeInfo"}}, "hash": "cadf21c25a2529dca9b8301a55cf483b779db48a185b74def4630204f7fb8319", "text": "Making use of the ``StreamingDataFrame`` API\n\nSo far we have only computed the cumulative sum, but the ``StreamingDataFrame`` actually has an extensive API that lets us run a broad range of streaming computations on our data. For example, let's apply a rolling mean to our x-values with a window of 500ms and overlay it on top of the 'raw' data:\n\n\n```python\nsource_df = streamz.dataframe.Random(freq='5ms', interval='100ms')\nsdf = (source_df-0.5).cumsum()\nraw_dmap = hv.DynamicMap(hv.Curve, streams=[Buffer(sdf.x)])\nsmooth_dmap = hv.DynamicMap(hv.Curve, streams=[Buffer(sdf.x.rolling('500ms').mean())])\n\n(raw_dmap.relabel('raw') * smooth_dmap.relabel('smooth')).opts(\n opts.Curve(width=500, show_grid=True))\n```\n\n\n\n\n```python\nsource_df.stop()\n```", "start_char_idx": 2, "end_char_idx": 751, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1338489e-8a26-4fac-8a57-3a7fd1ca0650": {"__data__": {"id_": "1338489e-8a26-4fac-8a57-3a7fd1ca0650", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "02cbb9b8-4acc-4d55-9f29-fea85a947a02", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1b0d6a241e86139e06d803db893dd16eb91f58cf809c09ddf8186c86a43cd2fb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d6a5f038-fba0-4770-8748-85c8de7ec4bf", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cadf21c25a2529dca9b8301a55cf483b779db48a185b74def4630204f7fb8319", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f3ee7d54-040f-4427-8f53-5bf0fb5d1229", "node_type": "1", "metadata": {}, "hash": "c689456c152add4c202e6f4c1f751c0aacbf8ce37fd66711cf5c86a04e6ce2de", "class_name": "RelatedNodeInfo"}}, "hash": "27844fcdb5b5f54d11d1c66502ea44d82e4bae29c7be877f5aa585a4d9b4e241", "text": "Customizing elements with ``functools.partial``\n\nIn this notebook we have avoided defining custom functions for ``DynamicMap`` by simply supplying the element class and using the element constructor instead. Although this works well for examples, it often won't generalize to real-life situations, because you don't have an opportunity to use anything other than the default dimensions. One simple way to get around this limitation is to use ``functools.partial``:\n\n\n\n\n```python\nfrom functools import partial\n```\n\nNow you can now easily create an inline callable that creates an element with custom key and value dimensions by supplying them to ``partial`` in the form ``partial(hv.Element, kdims=[...], vdims=[...])``. In the next section, we will see an example of this pattern using ``hv.BoxWhisker``.", "start_char_idx": 2, "end_char_idx": 806, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f3ee7d54-040f-4427-8f53-5bf0fb5d1229": {"__data__": {"id_": "f3ee7d54-040f-4427-8f53-5bf0fb5d1229", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a7d05f95-c684-40f8-859a-dc644a2ab29d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b5a6676640797a5ed34a6c86bf38d4bc514c2f00a858d27960ef34e00a0b0e3f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1338489e-8a26-4fac-8a57-3a7fd1ca0650", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "27844fcdb5b5f54d11d1c66502ea44d82e4bae29c7be877f5aa585a4d9b4e241", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5274ffed-a9f6-4d1f-a161-280cb4c9326a", "node_type": "1", "metadata": {}, "hash": "7e8b124516e087e93659c0c346edae25b5a4ad5259831451f0cc0478a57c8d48", "class_name": "RelatedNodeInfo"}}, "hash": "c689456c152add4c202e6f4c1f751c0aacbf8ce37fd66711cf5c86a04e6ce2de", "text": "Controlling the length\n\nBy default the ``Buffer`` accumulates a ``length`` of 1000 samples. In many cases this may be excessive, but we can specify a shorter (or longer) length value to control how much history we accumulate, often depending on the element type.\n\nIn the following example, a custom ``length`` is used together with a ``partial`` wrapping ``hv.BoxWhisker`` in order to display a cumulative sum generated from a stream of random dataframes:\n\n\n```python\nmulti_source = streamz.dataframe.Random(freq='50ms', interval='500ms')\nsdf = (multi_source-0.5).cumsum()\nhv.DynamicMap(hv.Table, streams=[Buffer(sdf.x, length=10)]) +\\\nhv.DynamicMap(partial(hv.BoxWhisker, kdims=[], vdims='x'), streams=[Buffer(sdf.x, length=100)])\n```\n\n\n\nHere the given stream ``sdf`` is being consumed by a table showing a short length (where only the items visible in the table need to be kept), along with a plot computing averages and variances over a longer length (100 items).", "start_char_idx": 2, "end_char_idx": 968, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5274ffed-a9f6-4d1f-a161-280cb4c9326a": {"__data__": {"id_": "5274ffed-a9f6-4d1f-a161-280cb4c9326a", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1fbe57bb-23e0-49c6-9362-2d68df7fe784", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2e428aaca8c4d29d3ab3a6dfce3bc8ac3f6064d9433f00e054d6d85170d19d87", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f3ee7d54-040f-4427-8f53-5bf0fb5d1229", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c689456c152add4c202e6f4c1f751c0aacbf8ce37fd66711cf5c86a04e6ce2de", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f45c210e-8286-4064-9f4a-a97a9ef12a55", "node_type": "1", "metadata": {}, "hash": "56b71a1dcf1a41ebfceeece6246924e2e04a4c3cc9f8191dc9d2a96042178a38", "class_name": "RelatedNodeInfo"}}, "hash": "7e8b124516e087e93659c0c346edae25b5a4ad5259831451f0cc0478a57c8d48", "text": "Updating multiple cells\n\nSince a ``StreamingDataFrame`` will emit data until it is stopped, we can subscribe multiple plots across different cells to the same stream. Here, let's add a ``Scatter`` plot of the same data stream as in the preceding cell:\n\n\n```python\nhv.DynamicMap(hv.Scatter, streams=[Buffer(sdf.x)]).redim.label(x='value', index='time')\n```\n\n\n\nHere we let the ``Scatter`` elements use the column names from the supplied ``DataFrames`` which are relabelled using the ``redim`` method. Stopping the stream will now stop updates to all three of these DynamicMaps:\n\n\n```python\nmulti_source.stop()\n```", "start_char_idx": 2, "end_char_idx": 614, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f45c210e-8286-4064-9f4a-a97a9ef12a55": {"__data__": {"id_": "f45c210e-8286-4064-9f4a-a97a9ef12a55", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6cad669e-e920-45b5-8ce2-3917f9cc3691", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "78bb289df37626a09531a3c424f8aedb9eafcf71a72778346ddae5c59025db7d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5274ffed-a9f6-4d1f-a161-280cb4c9326a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7e8b124516e087e93659c0c346edae25b5a4ad5259831451f0cc0478a57c8d48", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f6983e53-3421-48b5-bb68-d9a756c6dbbe", "node_type": "1", "metadata": {}, "hash": "785df62669e4d232e51650f9a55d2c9bd41a2166e3a28d3f2aed62b0d1b4baf4", "class_name": "RelatedNodeInfo"}}, "hash": "56b71a1dcf1a41ebfceeece6246924e2e04a4c3cc9f8191dc9d2a96042178a38", "text": "Operations over streaming data\n\nAs we discovered above, the ``Buffer`` lets us set a ``length``, which defines how many rows we want to accumulate. We can use this to our advantage and apply an operation over this length window. In this example we declare a ``Dataset`` and then apply the ``histogram`` operation to compute a ``Histogram`` over the specified ``length`` window:\n\n\n```python\nhist_source = streamz.dataframe.Random(freq='5ms', interval='100ms')\nsdf = (hist_source-0.5).cumsum()\ndmap = hv.DynamicMap(hv.Dataset, streams=[Buffer(sdf.x, length=500)])\nhv.operation.histogram(dmap, dimension='x')\n```\n\n\n\n\n```python\nhist_source.stop()\n```", "start_char_idx": 2, "end_char_idx": 648, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f6983e53-3421-48b5-bb68-d9a756c6dbbe": {"__data__": {"id_": "f6983e53-3421-48b5-bb68-d9a756c6dbbe", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "74c79f6f-ff44-46b2-bd87-fc295df69cd9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7217a537f8cb58509bbb5934cdd7551491df0c63ed1e38bb2903ea7fa30fa88f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f45c210e-8286-4064-9f4a-a97a9ef12a55", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "56b71a1dcf1a41ebfceeece6246924e2e04a4c3cc9f8191dc9d2a96042178a38", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c50ea2b8-f5af-4221-97d4-57dfa82115f4", "node_type": "1", "metadata": {}, "hash": "75474aef9f4f5bd37bc0de5698aa8e3eb81a8dcf56d5a51cb0d592c2864b6ab0", "class_name": "RelatedNodeInfo"}}, "hash": "785df62669e4d232e51650f9a55d2c9bd41a2166e3a28d3f2aed62b0d1b4baf4", "text": "Datashading\n\nThe same approach will also work for the datashader operation letting us datashade the entire ``length`` window even if we make it very large such as 1 million samples:\n\n\n```python\nfrom holoviews.operation.datashader import datashade\nfrom bokeh.palettes import Blues8\n\nlarge_source = streamz.dataframe.Random(freq='100us', interval='200ms')\nsdf = (large_source-0.5).cumsum()\ndmap = hv.DynamicMap(hv.Curve, streams=[Buffer(sdf.x, length=1000000)])\ndatashade(dmap, streams=[hv.streams.PlotSize], cnorm='linear', cmap=list(Blues8)).opts(width=600)\n```\n\n\n\n\n```python\nlarge_source.stop()\n```", "start_char_idx": 2, "end_char_idx": 601, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c50ea2b8-f5af-4221-97d4-57dfa82115f4": {"__data__": {"id_": "c50ea2b8-f5af-4221-97d4-57dfa82115f4", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f953407a-08cb-4e59-8048-c6bc3a580953", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "157ddfb7e0ff8db1d2c3fc4847a4bd7c987f6f8bdbae835510379bfc49c97c14", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f6983e53-3421-48b5-bb68-d9a756c6dbbe", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "785df62669e4d232e51650f9a55d2c9bd41a2166e3a28d3f2aed62b0d1b4baf4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "721d54b5-45bc-4c27-b3fe-b6439b97a3e0", "node_type": "1", "metadata": {}, "hash": "4cbe81e79f5bf780c51093900a6c74b76d32675513d6175f388ca4177030e473", "class_name": "RelatedNodeInfo"}}, "hash": "75474aef9f4f5bd37bc0de5698aa8e3eb81a8dcf56d5a51cb0d592c2864b6ab0", "text": "Asynchronous updates using the tornado ``IOLoop``\n\nIn most cases, instead of pushing updates manually from the same Python process, you'll want the object to update asynchronously as new data arrives. Since both Jupyter and Bokeh server run on tornado, we can use the tornado ``IOLoop`` in both cases to define a non-blocking co-routine that can push data to our stream whenever it is ready. The ``PeriodicCallback`` makes this approach very simple, we simply define a function which will be called periodically with a timeout defined in milliseconds. Once we have declared the callback we can call ``start`` to begin emitting events:\n\n\n```python\nfrom tornado.ioloop import PeriodicCallback\nfrom tornado import gen\n\ncount = 0\nbuffer = Buffer(np.zeros((0, 2)), length=50)\n\n@gen.coroutine\ndef f():\n global count\n count += 1\n buffer.send(np.array([[count, np.random.rand()]]))\n\ncb = PeriodicCallback(f, 100)\ncb.start()\n\nhv.DynamicMap(hv.Curve, streams=[buffer]).opts(padding=0.1, width=600)\n```\n\n\n\nSince the callback is non-blocking we can continue working in the notebook and execute other cells. Once we're done we can stop the callback by calling ``cb.stop()``.\n\n\n```python\ncb.stop()\n```", "start_char_idx": 2, "end_char_idx": 1198, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "721d54b5-45bc-4c27-b3fe-b6439b97a3e0": {"__data__": {"id_": "721d54b5-45bc-4c27-b3fe-b6439b97a3e0", "embedding": null, "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "aa77a454-2c53-4417-a147-ad55d1e5db08", "node_type": "4", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1419942c57d10452e5542bff19a0181f7d992c0df63dd2f97dae80b50b6157bd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c50ea2b8-f5af-4221-97d4-57dfa82115f4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "75474aef9f4f5bd37bc0de5698aa8e3eb81a8dcf56d5a51cb0d592c2864b6ab0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "274bc76e-b7aa-48a2-9498-5e9d76871546", "node_type": "1", "metadata": {}, "hash": "e39acbf430a7a519d0f09eb3831bbcf35c1d058266aff53aa605e2b67c1a78fd", "class_name": "RelatedNodeInfo"}}, "hash": "4cbe81e79f5bf780c51093900a6c74b76d32675513d6175f388ca4177030e473", "text": "Real examples\n\nUsing the ``Pipe`` and ``Buffer`` streams we can create complex streaming plots very easily. In addition to the toy examples we presented in this guide it is worth looking at looking at some of the examples using real, live, streaming data.\n\n* The streaming_psutil bokeh app is one such example which display CPU and memory information using the ``psutil`` library (install with ``pip install psutil`` or ``conda install psutil``)\n\n\n\nAs you can see, streaming data works like streams in HoloViews in general, flexibly handling changes over time under either explicit control or governed by some external data source.", "start_char_idx": 2, "end_char_idx": 634, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "274bc76e-b7aa-48a2-9498-5e9d76871546": {"__data__": {"id_": "274bc76e-b7aa-48a2-9498-5e9d76871546", "embedding": null, "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ccb80cc6-8a55-410a-b26b-b48cf26bca78", "node_type": "4", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e3801cf5b1fe232235daad9dc5093563b4874f4d5c3802cf8fa51e31cf943b52", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "721d54b5-45bc-4c27-b3fe-b6439b97a3e0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4cbe81e79f5bf780c51093900a6c74b76d32675513d6175f388ca4177030e473", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b639ffab-daf0-4c33-a26a-f5064621925d", "node_type": "1", "metadata": {}, "hash": "6afc7541aea89b0733cb901bf6e7f763fdedec947b0228e215deb764f5520ab1", "class_name": "RelatedNodeInfo"}}, "hash": "e39acbf430a7a519d0f09eb3831bbcf35c1d058266aff53aa605e2b67c1a78fd", "text": "Creating interactive dashboards\n\n\n```python\nimport pandas as pd\nimport holoviews as hv\n\nfrom bokeh.sampledata import stocks\nfrom holoviews.operation.timeseries import rolling, rolling_outlier_std\n\nhv.extension('bokeh')\n```\n\nIn the Data Processing Pipelines section we discovered how to declare a ``DynamicMap`` and control multiple processing steps with the use of custom streams as described in the Responding to Events guide. A DynamicMap works like a tiny web application, with widgets that select values along a dimension, and a plot that updates. Let's start with a function that loads stock data and see what a DynamicMap can do:\n\n\n```python\ndef load_symbol(symbol, variable, **kwargs):\n df = pd.DataFrame(getattr(stocks, symbol))\n df['date'] = df.date.astype('datetime64[ns]')\n return hv.Curve(df, ('date', 'Date'), variable).opts(framewise=True)\n\nstock_symbols = ['AAPL', 'IBM', 'FB', 'GOOG', 'MSFT']\nvariables = ['open', 'high', 'low', 'close', 'volume', 'adj_close']\ndmap = hv.DynamicMap(load_symbol, kdims=['Symbol','Variable'])\ndmap = dmap.redim.values(Symbol=stock_symbols, Variable=variables)\n\ndmap.opts(framewise=True)\nrolling(dmap, rolling_window=2)\n```\n\nHere we already have widgets for Symbol and Variable, as those are dimensions in the DynamicMap, but what if we wanted a widget to control the `rolling_window`width value in the HoloViews operation? We could redefine the DynamicMap to include the operation and accept that parameter as another dimension, but in complex cases we would quickly find we need more flexibility in defining widgets and layouts than DynamicMap can give us directly.", "start_char_idx": 2, "end_char_idx": 1626, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b639ffab-daf0-4c33-a26a-f5064621925d": {"__data__": {"id_": "b639ffab-daf0-4c33-a26a-f5064621925d", "embedding": null, "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "eafb5b1e-534f-445e-b4cf-09b6d48fe65e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "29820a3b8a1ccc0fd46d804ae0ac3e6be99dabc9f7b58da8507d9878725ee64b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "274bc76e-b7aa-48a2-9498-5e9d76871546", "node_type": "1", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e39acbf430a7a519d0f09eb3831bbcf35c1d058266aff53aa605e2b67c1a78fd", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "58cb5f0d-dca1-4451-8040-80f78d0cdeaf", "node_type": "1", "metadata": {}, "hash": "48d70abf655fa1dcbac1fb72607481223b49694424a19b6e36cfe956acfdd0bc", "class_name": "RelatedNodeInfo"}}, "hash": "6afc7541aea89b0733cb901bf6e7f763fdedec947b0228e215deb764f5520ab1", "text": "Building dashboards\n\nFor more flexibility, we can build a full-featured dashboard using the Panel library, which is what a DynamicMap is already using internally to generate widgets and layouts. We can easily declare our own custom Panel widgets and link them to HoloViews streams to get dynamic, user controllable analysis workflows.\n\nHere, let's start with defining various Panel widgets explicitly, choosing a `RadioButtonGroup` for the `symbol` instead of DynamicMaps's default `Select` widget:\n\n\n```python\nimport panel as pn\n\nsymbol = pn.widgets.RadioButtonGroup(options=stock_symbols)\nvariable = pn.widgets.Select(options=variables)\nrolling_window = pn.widgets.IntSlider(name='Rolling Window', value=10, start=1, end=365)\n\npn.Column(symbol, variable, rolling_window)\n```\n\nAs you can see, these widgets can be displayed but they aren't yet attached to anything, so they don't do much. We can now use ``pn.bind`` to bind the `symbol` and `variable` widgets to the arguments of the DynamicMap callback function, and provide `rolling_window` to the `rolling` operation argument. (HoloViews operations accept Panel widgets or param Parameter values, and they will then update reactively to changes in those widgets.)\n\nWe can then lay it all out into a simple application that works similarly to the regular DynamicMap display but where we can add our additional widget and control every aspect of the widget configuration and the layout:\n\n\n```python\ndmap = hv.DynamicMap(pn.bind(load_symbol, symbol=symbol, variable=variable))\nsmoothed = rolling(dmap, rolling_window=rolling_window)\n\napp = pn.Row(pn.WidgetBox('## Stock Explorer', symbol, variable, rolling_window), \n smoothed.opts(width=500, framewise=True)).servable()\napp\n```\n\nHere we chose to lay the widgets out into a box to the left of the plot, but we could put the widgets each in different locations, add different plots, etc., to create a full-featured dashboard. See panel.holoviz.org for the full set of widgets and layouts supported.\n\nNow that we have an app, we can launch it in a separate server if we wish (using `app.show()`), run it as an entirely separate process (`panel serve .ipynb`, to serve the object marked `servable` above), or export it to a static HTML file (sampling the space of parameter values using \"embed\"):\n\n\n```python\napp.save(\"dashboard.html\", embed=True)\n```", "start_char_idx": 2, "end_char_idx": 2363, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "58cb5f0d-dca1-4451-8040-80f78d0cdeaf": {"__data__": {"id_": "58cb5f0d-dca1-4451-8040-80f78d0cdeaf", "embedding": null, "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4594f60c-55ef-4da1-9b9b-fe12b1d99028", "node_type": "4", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "286b6b3a8eed0a680aabe79da3b74c2602e96b6c140884d3b07c2d9ba81810b7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b639ffab-daf0-4c33-a26a-f5064621925d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6afc7541aea89b0733cb901bf6e7f763fdedec947b0228e215deb764f5520ab1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d9261bc9-ddf4-4c06-ab2c-99aa0d95923b", "node_type": "1", "metadata": {}, "hash": "05e6c679ccb77511bf595dab5cb99980bab8f57617e8dcb3ac95711f70594866", "class_name": "RelatedNodeInfo"}}, "hash": "48d70abf655fa1dcbac1fb72607481223b49694424a19b6e36cfe956acfdd0bc", "text": "Declarative dashboards\n\nWhat if we want our analysis code usable both as a dashboard and also in \"headless\" contexts such as batch jobs or remote execution? Both Panel and HoloViews are built on the param library, which lets you capture the definitions and allowable values for your widgets in a way that's not attached to any GUI. That way you can declare all of your attributes and allowed values once, presenting a GUI if you want to explore them interactively or else simply provide specific values if you want batch operation.\n\nWith this approach, we declare a ``StockExplorer`` class subclassing ``Parameterized`` and defining three parameters, namely the rolling window, the symbol, and the variable to show for that symbol:\n\n\n```python\nimport param\n\nclass StockExplorer(param.Parameterized):\n\n rolling_window = param.Integer(default=10, bounds=(1, 365))\n symbol = param.ObjectSelector(default='AAPL', objects=stock_symbols)\n variable = param.ObjectSelector(default='adj_close', objects=variables)\n\n @param.depends('symbol', 'variable')\n def load_symbol(self):\n df = pd.DataFrame(getattr(stocks, self.symbol))\n df['date'] = df.date.astype('datetime64[ns]')\n return hv.Curve(df, ('date', 'Date'), self.variable).opts(framewise=True)\n```\n\nHere the StockExplorer class will look similar to the Panel code above, defining most of the same information that's in the Panel widgets, but without any dependency on Panel or other GUI libraries; it's simply declaring that this code accepts certain parameter values of the specified types and ranges. These declarations are useful even outside a GUI context, because they allow type and range checking for detecting user errors, but they are also sufficient for creating a GUI later. \n\nInstead of using `pn.bind` to bind widget values to functions, here we are declaring that each method depends on the specified parameters, which can be expressed independently of whether there is a widget controlling those parameters; it simply declares (in a way that Panel can utilize) that the given method needs re-running when any of the parameters in that list changes. \n\nNow let's use the `load_symbol` method, which already declares which parameters it depends on, as the callback of a DynamicMap and create widgets out of those parameters to build a little GUI:\n\n\n```python\nexplorer = StockExplorer()\nstock_dmap = hv.DynamicMap(explorer.load_symbol)\npn.Row(explorer.param, stock_dmap)\n```\n\nHere you'll notice that the `rolling_window` widget doesn't do anything, because it's not connected to anything (e.g., nothing `@param.depends` on it). As we saw in the Data Processing Pipelines section, the ``rolling`` and ``rolling_outlier_std`` operations both accept a ``rolling_window`` parameter, so lets provide that to the operations and display the output of those operations. Finally we compose everything into a panel ``Row``:\n\n\n```python", "start_char_idx": 2, "end_char_idx": 2919, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d9261bc9-ddf4-4c06-ab2c-99aa0d95923b": {"__data__": {"id_": "d9261bc9-ddf4-4c06-ab2c-99aa0d95923b", "embedding": null, "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "200ad9b6-5418-4eec-9d82-d8e20e70e402", "node_type": "4", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7ba4666a5aae4a3f3a339011100f448d3286c430ba2fd13f0327da2c66c15983", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "58cb5f0d-dca1-4451-8040-80f78d0cdeaf", "node_type": "1", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "48d70abf655fa1dcbac1fb72607481223b49694424a19b6e36cfe956acfdd0bc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6a62ae2b-406d-49c2-8b2a-970b2d47c2e7", "node_type": "1", "metadata": {}, "hash": "b739de32cf34d48e39a1e87d383aa0758631dde30ee6f8dcdc9c9df7d8700484", "class_name": "RelatedNodeInfo"}}, "hash": "05e6c679ccb77511bf595dab5cb99980bab8f57617e8dcb3ac95711f70594866", "text": "Apply rolling mean\nsmoothed = rolling(stock_dmap, rolling_window=explorer.param.rolling_window)", "start_char_idx": 2, "end_char_idx": 97, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6a62ae2b-406d-49c2-8b2a-970b2d47c2e7": {"__data__": {"id_": "6a62ae2b-406d-49c2-8b2a-970b2d47c2e7", "embedding": null, "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "70260c34-44e4-4545-80ad-50b57dd8f102", "node_type": "4", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "780fe42d927b6fde2b0b0d144b57b17c8fbde0477bd893e49539f7dc6e762975", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d9261bc9-ddf4-4c06-ab2c-99aa0d95923b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "05e6c679ccb77511bf595dab5cb99980bab8f57617e8dcb3ac95711f70594866", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e6525d9b-1add-4256-8229-9f9b0109fef2", "node_type": "1", "metadata": {}, "hash": "eb09e41039a1561205ca338f66af3e16015b1024673e90ea7fdece3e31171d38", "class_name": "RelatedNodeInfo"}}, "hash": "b739de32cf34d48e39a1e87d383aa0758631dde30ee6f8dcdc9c9df7d8700484", "text": "Find outliers\noutliers = rolling_outlier_std(stock_dmap, rolling_window=explorer.param.rolling_window).opts(\n color='red', marker='triangle')\n\npn.Row(explorer.param, (smoothed * outliers).opts(width=600))\n```", "start_char_idx": 2, "end_char_idx": 213, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e6525d9b-1add-4256-8229-9f9b0109fef2": {"__data__": {"id_": "e6525d9b-1add-4256-8229-9f9b0109fef2", "embedding": null, "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "235a6c84-fd2f-43b8-b058-779e43fc9d68", "node_type": "4", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "50502d685e679f8c226df8fce50824bac8016b96213161ddf9130cd6c6aac346", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6a62ae2b-406d-49c2-8b2a-970b2d47c2e7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b739de32cf34d48e39a1e87d383aa0758631dde30ee6f8dcdc9c9df7d8700484", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cebd430f-8c87-4f4a-941b-e1006c882e0d", "node_type": "1", "metadata": {}, "hash": "445b71eee47fb6c6114d330984d5c61173a57ae5bfe02a23147abbf10d779fd3", "class_name": "RelatedNodeInfo"}}, "hash": "eb09e41039a1561205ca338f66af3e16015b1024673e90ea7fdece3e31171d38", "text": "Replacing the output\n\nUpdating plots using a ``DynamicMap`` is a very efficient means of updating a plot since it will only update the data that has changed. In some cases it is either necessary or more convenient to redraw a plot entirely. ``Panel`` makes this easy by annotating a method with any dependencies that should trigger the plot to be redrawn. In the example below we extend the ``StockExplorer`` by adding a ``datashade`` boolean and a view method which will flip between a datashaded and regular view of the plot:\n\n\n```python\nfrom holoviews.operation.datashader import datashade, dynspread\n\nclass AdvancedStockExplorer(StockExplorer): \n\n datashade = param.Boolean(default=False)\n\n @param.depends('datashade')\n def view(self):\n stocks = hv.DynamicMap(self.load_symbol)\n\n # Apply rolling mean\n smoothed = rolling(stocks, rolling_window=self.param.rolling_window)\n if self.datashade:\n smoothed = dynspread(datashade(smoothed, aggregator='any')).opts(framewise=True)\n\n # Find outliers\n outliers = rolling_outlier_std(stocks, rolling_window=self.param.rolling_window).opts(\n width=600, color='red', marker='triangle', framewise=True)\n return (smoothed * outliers)\n```\n\nIn the previous example we explicitly called the ``view`` method, but to allow ``panel`` to update the plot when the datashade parameter is toggled we instead pass it the actual view method. Whenever the datashade parameter is toggled ``panel`` will call the method and update the plot with whatever is returned:\n\n\n```python\nexplorer = AdvancedStockExplorer()\npn.Row(explorer.param, explorer.view)\n```\n\nAs you can see using streams we have bound the widgets to the streams letting us easily control the stream values and making it trivial to define complex dashboards. For more information on how to deploy bokeh apps from HoloViews and build dashboards see the Deploying Bokeh Apps user guide section.", "start_char_idx": 2, "end_char_idx": 1965, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cebd430f-8c87-4f4a-941b-e1006c882e0d": {"__data__": {"id_": "cebd430f-8c87-4f4a-941b-e1006c882e0d", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "058d2500-1a16-41a9-b51f-9dc258ee821f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0f8afd12cf2fb95ef472411d747e5f42d56581b83f9104feb8ab4d1d6de0ff8c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e6525d9b-1add-4256-8229-9f9b0109fef2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "eb09e41039a1561205ca338f66af3e16015b1024673e90ea7fdece3e31171d38", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3781e6b7-259d-49bb-9689-d6d70e00ad61", "node_type": "1", "metadata": {}, "hash": "afa30723c091e8f0106166a81418d936dea17a619cd3373834c2ccbab1cc2eff", "class_name": "RelatedNodeInfo"}}, "hash": "445b71eee47fb6c6114d330984d5c61173a57ae5bfe02a23147abbf10d779fd3", "text": "Basics\n\nLet us start by annotating a small set of Points. To do this, we need two things:\n\n1. A Points Element to annotate or edit\n2. An annotator object to collect and store annotations\n\nThe annotator is a callable object with its own state that can be called to return a Layout consisting of the object to be annotated and an Overlay of editable table(s):\n\n\n```python\npoints = hv.Points([(0.0, 0.0), (1.0, 1.0), (200000.0, 2000000.0)]).opts(size=10, min_height=500)\n\nannotator = hv.annotate.instance()\nlayout = annotator(hv.element.tiles.OSM() * points, annotations=['Label'], name=\"Point Annotations\")\n\nprint(layout)\n```\n\nThis layout of a DynamicMap (the user-editable Element data) and an Overlay (the user-editable table) lets a user input the required information:\n\n\n```python\nlayout\n```\n\nHere we have pre-populated the Element with three points. Each of the points has three bits of information that can be edited using the table: the x location, y location, and a \"Label\", which was initialized to dummy values when we called `annotate` and asked that there be a `Label` column. Try clicking on one of the rows and editing the location or the label to anything you like. As long as Python is running and the new location is in the viewport, you should see the dot move when you edit the location, and any labels you entered should be visible in the table.\n\nYou can also edit the locations graphically using the PointDraw tool in the toolbar:\n\nOnce you select that tool, you should be able to click and drag any of the existing points and see the location update in the table. Whether you click on the table or the points, the same object should be selected in each, so that you can see how the graphical and tabular representations relate.\n\nThe PointDraw tool also allows us to add completely new points; once the tool is selected, just click on the plot above in locations not already containing a point and you can see a new point and a new table row appear ready for editing. You can also delete points by selecting them in the plot then pressing Backspace or Delete (depending on operating system).\n\nAll the above editing and interaction could have been done if we had simply called `hv.annotate(points, annotations=['Label'])` directly, but instead we first saved an \"instance\" of the annotator object so that we'd also be able to access the resulting data. So, once we are done collecting data from the user, let's use the saved `annotator` object handle to read out the values (by re-evaluating the following line):\n\n\n```python\nannotator.annotated.dframe()\n```\n\nYou should see that you can access the current set of user-provided or user-modified points and their user-provided labels from within Python, ready for any subsequent processing you need to do. \n\nWe can also access the currently `selected` points, in case we care only about a subset of the points (which will be empty if no points/rows are selected):\n\n\n```python\nannotator.selected.dframe()\n```", "start_char_idx": 2, "end_char_idx": 2977, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3781e6b7-259d-49bb-9689-d6d70e00ad61": {"__data__": {"id_": "3781e6b7-259d-49bb-9689-d6d70e00ad61", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c97853cc-fc84-4045-a112-260b6f167514", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "793ed447d1334a87445024e96a77b2f673bf7ffec187a8fff9410a34cb41988d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cebd430f-8c87-4f4a-941b-e1006c882e0d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "445b71eee47fb6c6114d330984d5c61173a57ae5bfe02a23147abbf10d779fd3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3bef0c62-b25c-48a9-8ee1-f8a794b768b8", "node_type": "1", "metadata": {}, "hash": "0ad9dced695615111a5bb279a4d94556d91b65cd2fbae08d7d5d72696c0bb14c", "class_name": "RelatedNodeInfo"}}, "hash": "afa30723c091e8f0106166a81418d936dea17a619cd3373834c2ccbab1cc2eff", "text": "Configuring the Annotator\n\nIn addition to managing the list of `annotations`, the `annotate` helper exposes a few additional parameters. Remember like most Param-based objects you can get help about `annotate` parameters using the `hv.help` function:\n\n\n```python\nhv.help(hv.annotate)\n```", "start_char_idx": 2, "end_char_idx": 289, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3bef0c62-b25c-48a9-8ee1-f8a794b768b8": {"__data__": {"id_": "3bef0c62-b25c-48a9-8ee1-f8a794b768b8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9768d38e-9c7c-498a-ac56-bd3017c60eda", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "12164958853bda2ae1cf5f64fd0c9e193455647959adb771607f42cbb90a2b78", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3781e6b7-259d-49bb-9689-d6d70e00ad61", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "afa30723c091e8f0106166a81418d936dea17a619cd3373834c2ccbab1cc2eff", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ffd47a37-e834-43a7-bd57-be0d73e9a9d0", "node_type": "1", "metadata": {}, "hash": "8c2f253abde9038d6bd55cff0e9affee74863b13a65183e8ba42bd54e775a299", "class_name": "RelatedNodeInfo"}}, "hash": "0ad9dced695615111a5bb279a4d94556d91b65cd2fbae08d7d5d72696c0bb14c", "text": "Annotation types\n\nThe default annotation type is a string, to allow you to put in arbitrary information that you later process in Python. If you want to enforce a more specific type, you can specify the annotation-value types explicitly using a dictionary mapping from column name to the type:\n\n\n```python\nhv.annotate(points, annotations={'int': int, 'float': float, 'str': str})\n```\n\nThis example also shows how to collect multiple columns of information for the same data point.", "start_char_idx": 2, "end_char_idx": 482, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ffd47a37-e834-43a7-bd57-be0d73e9a9d0": {"__data__": {"id_": "ffd47a37-e834-43a7-bd57-be0d73e9a9d0", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "87969b43-049b-451a-a449-9b23bb7bc72a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6ca7469d41786dc26d7c9e3110209af3f9788e50d2461c5883e2df3176fc25e8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3bef0c62-b25c-48a9-8ee1-f8a794b768b8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0ad9dced695615111a5bb279a4d94556d91b65cd2fbae08d7d5d72696c0bb14c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f5d13fbb-119f-4882-a80b-19dadc5c427e", "node_type": "1", "metadata": {}, "hash": "09d4e298718b34c533a91e02c122b782d8a917d1eabe9bdd87c485d4e7e78b68", "class_name": "RelatedNodeInfo"}}, "hash": "8c2f253abde9038d6bd55cff0e9affee74863b13a65183e8ba42bd54e775a299", "text": "Types of Annotators\n\nCurrently only a limited set of Elements may be annotated, which include:\n\n* ``Points``/``Scatter``\n* ``Curve``\n* ``Path``\n* ``Polygons``\n* ``Rectangles``\n\nAdding support for new elements, in most cases, requires adding corresponding drawing/edit tools to Bokeh itself. But if you have data of other types, you may still be able to annotate it by casting it to one of the indicated types, collecting the data, then casting it back.", "start_char_idx": 2, "end_char_idx": 454, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f5d13fbb-119f-4882-a80b-19dadc5c427e": {"__data__": {"id_": "f5d13fbb-119f-4882-a80b-19dadc5c427e", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1d6ad802-6cab-453e-af3a-cfe845af50d7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "de5cf3643e4072faab13522e2d8a44dc5acbd1ca9da89d46388fe078f6a90d31", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ffd47a37-e834-43a7-bd57-be0d73e9a9d0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8c2f253abde9038d6bd55cff0e9affee74863b13a65183e8ba42bd54e775a299", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "591f8bff-af2e-4639-b122-68833e2e18af", "node_type": "1", "metadata": {}, "hash": "738f05022764a3e9f96b47c514b6885020bbe6237c945560981ab3e5b1b706b1", "class_name": "RelatedNodeInfo"}}, "hash": "09d4e298718b34c533a91e02c122b782d8a917d1eabe9bdd87c485d4e7e78b68", "text": "Annotating Curves\n\nTo allow dragging the vertices of the Curve, the ``Curve`` annotator uses the PointDraw tool in the toolbar: \nThe vertices will appear when the tool is selected or a vertex is selected in the table. Unlike most other annotators the Curve annotator only allows editing the vertices and does not allow adding new ones.\n\n\n```python\ncurve = hv.Curve(np.random.randn(50).cumsum())\n\ncurve_annotator = hv.annotate.instance()\n\ncurve_annotator(curve.opts(width=800, height=400, responsive=False), annotations={'Label': str})\n```\n\nTo access the data you can make use of the ``annotated`` property on the annotator:\n\n\n```python\ncurve_annotator.annotated.dframe().head(5)\n```", "start_char_idx": 2, "end_char_idx": 684, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "591f8bff-af2e-4639-b122-68833e2e18af": {"__data__": {"id_": "591f8bff-af2e-4639-b122-68833e2e18af", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "148d2db6-3a89-4158-b0ea-690cdc899672", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0f1f2d1059996698f404b08308c6ebeb42a2adad10fb8f03e65c9e9e626eb4b1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f5d13fbb-119f-4882-a80b-19dadc5c427e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "09d4e298718b34c533a91e02c122b782d8a917d1eabe9bdd87c485d4e7e78b68", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2adbbe4b-7d1f-4212-a712-a31e64ab5a19", "node_type": "1", "metadata": {}, "hash": "855a075b6190c7596fa70679fed2dd4f9c366669bd1ae5ea89a57f275f29c1e8", "class_name": "RelatedNodeInfo"}}, "hash": "738f05022764a3e9f96b47c514b6885020bbe6237c945560981ab3e5b1b706b1", "text": "Annotating Rectangles\n\nThe `Rectangles` annotator behaves very similarly to the Points annotator. It allows adding any number of annotation columns, using Bokeh's `BoxEdit` tool that allows both drawing and moving boxes. To see how to use the BoxEdit tool, refer to the HoloViews BoxEdit stream reference, but briefly:\n\n* Select the `BoxEdit` tool in the toolbar: \n* Click and drag on an existing Rectangle to move it\n* Double click to start drawing a new Rectangle at one corner, and double click to complete the rectangle at the opposite corner\n* Select a rectangle and press the Backspace or Delete key (depending on OS) to delete it\n* Edit the box coordinates in the table to resize it\n\n\n```python\nboxes = hv.Rectangles([(0, 0, 1, 1), (1.5, 1.5, 2.5, 2.5)])\n\nbox_annotator = hv.annotate.instance()\n\nbox_annotator(boxes.opts(width=800, height=400, responsive=False), annotations=['Label'])\n```\n\nTo access the data we can make use of the ``annotated`` property on the annotator instance:\n\n\n```python\nbox_annotator.annotated.dframe()\n```", "start_char_idx": 2, "end_char_idx": 1040, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2adbbe4b-7d1f-4212-a712-a31e64ab5a19": {"__data__": {"id_": "2adbbe4b-7d1f-4212-a712-a31e64ab5a19", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7b33f86b-fe47-4863-8115-9584903253c0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a4d05a167cd3a5873cbf0642ef35004bf296e7e92ce278f9239533bc4b24b2ae", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "591f8bff-af2e-4639-b122-68833e2e18af", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "738f05022764a3e9f96b47c514b6885020bbe6237c945560981ab3e5b1b706b1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "44ac06d5-c76e-4455-b1bf-ac1249be72b3", "node_type": "1", "metadata": {}, "hash": "255c5f97dba14ed1fd0b44307fc3c7105f79394293e1bb92fae3b13744296b17", "class_name": "RelatedNodeInfo"}}, "hash": "855a075b6190c7596fa70679fed2dd4f9c366669bd1ae5ea89a57f275f29c1e8", "text": "Annotating paths/polygons\n\nUnlike the Points and Boxes annotators, the Path and Polygon annotators allow annotating not just each individual entity but also the vertices that make up the paths and polygons. For more information about using the editing tools associated with this annotator refer to the HoloViews PolyDraw and PolyEdit stream reference guides, but briefly:", "start_char_idx": 2, "end_char_idx": 373, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "44ac06d5-c76e-4455-b1bf-ac1249be72b3": {"__data__": {"id_": "44ac06d5-c76e-4455-b1bf-ac1249be72b3", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ed5230b4-63f5-4837-9b0f-04bcbda52e63", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "763e03044bec4bfe9ae0500ab364628a7e62123031437a03aed73253b5a6a183", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2adbbe4b-7d1f-4212-a712-a31e64ab5a19", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "855a075b6190c7596fa70679fed2dd4f9c366669bd1ae5ea89a57f275f29c1e8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "98a5e8d6-b5d8-4e82-aa79-7f4d9d0b86a8", "node_type": "1", "metadata": {}, "hash": "386dfffe67286ddc69d82b39ad3e185fae29892786494ef3f226f8e08edd3519", "class_name": "RelatedNodeInfo"}}, "hash": "255c5f97dba14ed1fd0b44307fc3c7105f79394293e1bb92fae3b13744296b17", "text": "Drawing/Selecting Deleting Paths/Polygons\n\n- Select the PolyDraw tool in the toolbar: \n- Double click to start a new object, single click to add each vertex, and double-click to complete it.\n- Delete paths/polygons by selecting and pressing Delete key (OSX) or Backspace key (PC)", "start_char_idx": 2, "end_char_idx": 281, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "98a5e8d6-b5d8-4e82-aa79-7f4d9d0b86a8": {"__data__": {"id_": "98a5e8d6-b5d8-4e82-aa79-7f4d9d0b86a8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fa42baf8-1ae5-418c-855e-a36d463371e1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "822a87ace62512286addfb76033e701192a710b9544c5e6b2563e9eddd8297fb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "44ac06d5-c76e-4455-b1bf-ac1249be72b3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "255c5f97dba14ed1fd0b44307fc3c7105f79394293e1bb92fae3b13744296b17", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "540075a1-9aac-41a9-9a3d-f146e22fe602", "node_type": "1", "metadata": {}, "hash": "813d5c265492a33559c4592efe55cc3a194a3ccfb31d99379fe9ffa7d427db6e", "class_name": "RelatedNodeInfo"}}, "hash": "386dfffe67286ddc69d82b39ad3e185fae29892786494ef3f226f8e08edd3519", "text": "Editing Paths/Polygons\n\n- Select the PolyEdit tool in the toolbar: \n- Double click a Path/Polygon to start editing\n- Drag vertices to edit them, delete vertices by selecting them\n\nTo edit and annotate the vertices, use the draw tool or the first table to select a particular path/polygon and then navigate to the Vertices tab.\n\n\n```python\npath = hv.Path([hv.Box(0, 0, 1), hv.Ellipse(1, 1, 1)])\n\npath_annotator = hv.annotate.instance()\n\npath_annotator(path.opts(width=800, height=400, responsive=False), annotations=['Label'], vertex_annotations=['Value'])\n```\n\nTo access the data we can make use of the iloc method on `Path` objects to access a particular path, and then access the `.data` or convert it to a dataframe:\n\n\n```python\npath_annotator.annotated.iloc[0].dframe()\n```", "start_char_idx": 2, "end_char_idx": 779, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "540075a1-9aac-41a9-9a3d-f146e22fe602": {"__data__": {"id_": "540075a1-9aac-41a9-9a3d-f146e22fe602", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a4fe5449-4f7b-4dbe-999b-3265415d817a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "00dc94e1a878c1a300d0e93abfc3bfc581df1d04aac1b5caa3d4caed43707823", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "98a5e8d6-b5d8-4e82-aa79-7f4d9d0b86a8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "386dfffe67286ddc69d82b39ad3e185fae29892786494ef3f226f8e08edd3519", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "393e9142-e5be-4f8e-afdb-c34257c2337d", "node_type": "1", "metadata": {}, "hash": "859f31b70f80f007e7b457c4b5752f09dbe5bd54ce451aef4fe391d45ff21c75", "class_name": "RelatedNodeInfo"}}, "hash": "813d5c265492a33559c4592efe55cc3a194a3ccfb31d99379fe9ffa7d427db6e", "text": "Composing Annotators\n\nOften we will want to add some annotations on top of one or more other elements which provide context, e.g. when annotating an image with a set of `Points`. As long as only one annotation layer is required you can pass an overlay of multiple elements to the `annotate` operation and it will automatically associate the annotator with the layer that supports annotation. Note however that this will error if multiple elements that support annotation are provided. Below we will annotate a two-photon microscopy image with a set of Points, e.g. to mark the location of each cell:\n\n\n```python\nimg = hv.Image(np.load('../assets/twophoton.npz')['Calcium'][..., 0])\ncells = hv.Points([]).opts(width=500, height=500, responsive=False, padding=0)\n\nhv.annotate(img * cells, annotations=['Label'], name=\"Cell Annotator\")\n```", "start_char_idx": 2, "end_char_idx": 838, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "393e9142-e5be-4f8e-afdb-c34257c2337d": {"__data__": {"id_": "393e9142-e5be-4f8e-afdb-c34257c2337d", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f2337909-1244-4aa2-83bf-ef683badee97", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "097b5ab8e7ec1bf08d206259ded68c7b5eb8e468c076af916770d8f822592317", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "540075a1-9aac-41a9-9a3d-f146e22fe602", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "813d5c265492a33559c4592efe55cc3a194a3ccfb31d99379fe9ffa7d427db6e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "12091986-7fda-43db-905e-67286280b78c", "node_type": "1", "metadata": {}, "hash": "b0f0f2d0113c72c731fa2e11af8eb498dd20506256edfdbac4e52f650c36fab1", "class_name": "RelatedNodeInfo"}}, "hash": "859f31b70f80f007e7b457c4b5752f09dbe5bd54ce451aef4fe391d45ff21c75", "text": "Multiple Annotators\n\nIf you want to work with multiple annotators in the same plot, you can recompose and rearrange the components returned by each `annotate` helper manually, but doing so can get confusing. To simplify working with multiple annotators at the same time, the `annotate` helper provides a special classmethod that allows composing multiple annotators and other elements, e.g. making a set of tiles into a combined layout consisting of all the components:\n\n\n```python\npoint_annotate = hv.annotate.instance()\npoints = hv.Points([(500000, 500000), (1000000, 1000000)]).opts(size=10, color='red', line_color='black')\npoint_layout = point_annotate(points, annotations=['Label'])\n\npoly_annotate = hv.annotate.instance()\npoly_layout = poly_annotate(hv.Polygons([]), annotations=['Label'])\n\nhv.annotate.compose(hv.element.tiles.OSM(), point_layout, poly_layout)\n```", "start_char_idx": 2, "end_char_idx": 874, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "12091986-7fda-43db-905e-67286280b78c": {"__data__": {"id_": "12091986-7fda-43db-905e-67286280b78c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2800c53a-abf6-4893-8930-42ecdefa6eb2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "14791b81ad1e0c793b13e4fb4d592d9b22febb51d373ce13247ac0732851fb37", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "393e9142-e5be-4f8e-afdb-c34257c2337d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "859f31b70f80f007e7b457c4b5752f09dbe5bd54ce451aef4fe391d45ff21c75", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "158c5880-e03a-411d-89d8-b17e71158a9c", "node_type": "1", "metadata": {}, "hash": "be5f44f9a939986245a08d7f89b173154a7cb91340ecbda80247735e3d98c6fd", "class_name": "RelatedNodeInfo"}}, "hash": "b0f0f2d0113c72c731fa2e11af8eb498dd20506256edfdbac4e52f650c36fab1", "text": "Internals\n\nThe `annotate` function builds on Param and Panel, creating and wrapping Panel `Annotator` panes internally. These objects make it easy to include the annotator in Param-based workflows and trigger actions when parameters change and/or update the annotator in response to external events. The Annotator of a `annotate` instance can be accessed using the `annotator` attribute:\n\n\n```python\nprint(point_annotate.annotator)\n```\n\nThis object can be included directly in a Panel layout, be used to watch for parameter changes, or updated directly. To see the effect of updating directly, uncomment the line below, execute that cell, and then look at the previous plot of Africa, which should get updated with 10 randomly located blue dots.\n\n\n```python\n#point_annotate.annotator.object = hv.Points(np.random.randn(10, 2)*1000000).opts(color='blue')\n```", "start_char_idx": 2, "end_char_idx": 859, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "158c5880-e03a-411d-89d8-b17e71158a9c": {"__data__": {"id_": "158c5880-e03a-411d-89d8-b17e71158a9c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b79cb07a-468c-41f1-8c6d-e8ba9bdbf4f3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a4a0a72cf512a2f7f7ac6818ffc33b438aae128305fa87b2b687b552d318851e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "12091986-7fda-43db-905e-67286280b78c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b0f0f2d0113c72c731fa2e11af8eb498dd20506256edfdbac4e52f650c36fab1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6b472920-55a2-4458-ae52-0bf3407a2377", "node_type": "1", "metadata": {}, "hash": "3a6ef6c5b172dca167e8f5661a97b7fe2c0640dc947c587fb7df4b31dff9efb8", "class_name": "RelatedNodeInfo"}}, "hash": "be5f44f9a939986245a08d7f89b173154a7cb91340ecbda80247735e3d98c6fd", "text": "Using colormaps\n\nHoloViews supports a wide range of colormaps, each of which allow you to translate numerical data values into visible colors in a plot. Here we will review all the colormaps provided for HoloViews and discuss when and how to use them.\n\nThe Styling_Plots user guide discusses how to specify any of the colormaps discussed here, using the `cmap` style option:\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nhv.extension('matplotlib')\n\nls = np.linspace(0, 10, 400)\nx,y = np.meshgrid(ls, ls)\nimg = hv.Image(np.sin(x)*np.cos(y)+0.1*np.random.rand(400,400), \n bounds=(-20,-20,20,20)).opts(colorbar=True, xaxis=None, yaxis=None)\n\nhv.Layout([img.relabel(c).opts(cmap=c) for c in ['gray','PiYG','flag','Set1']])\n```\n\nAs you can see, the colormap you choose can dramatically change how your data appears. A well-chosen colormap can help guide the user to notice the features of the data you want to highlight, while a poorly chosen colormap can completely obscure the data and lead to erroneous conclusions. E.g. the low levels of noise present in this data are very difficult to see in A and B, but they completely dominate the plot in C and are visible only at specific (presumably arbitrary) value levels that correspond to color transitions in D. Thus it is important to choose colormaps very carefully!\n\nNote that the `cmap` style option used above is applied by the underlying plotting library, not by HoloViews itself. In the above example, Matplotlib uses it as the colormap constructs the image, whereas a Bokeh version of the same plot would provide the colormap to the Bokeh JavaScript code running in the local web browser, which allows the user to control the colormap dynamically in some cases.\n\nColormaps can also be used with the Datashader `shade()` operation, in which the provided `cmap` is applied by Datashader to create an image *before* passing the image to the plotting library, which enables additional Datashader features but disables client-side features like colorbars and dynamic colormapping on display.", "start_char_idx": 2, "end_char_idx": 2064, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6b472920-55a2-4458-ae52-0bf3407a2377": {"__data__": {"id_": "6b472920-55a2-4458-ae52-0bf3407a2377", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1ba1020e-d908-42b5-962d-226b103deb22", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fea7c84c2db4255d531249b2421b9fdafb752348f274e81adc0d9b1bd38578af", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "158c5880-e03a-411d-89d8-b17e71158a9c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "be5f44f9a939986245a08d7f89b173154a7cb91340ecbda80247735e3d98c6fd", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cdd29e47-f21a-444b-9e4d-e9804ea5efb1", "node_type": "1", "metadata": {}, "hash": "0ee35dff150226c5c6c17f7115cf7bd8bd4dc49d501a8067e1834dd4395278ab", "class_name": "RelatedNodeInfo"}}, "hash": "3a6ef6c5b172dca167e8f5661a97b7fe2c0640dc947c587fb7df4b31dff9efb8", "text": "Available colormaps\n\nAs outlined in Styling_Plots, you can easily make your own custom colormaps, but it's quite difficult to ensure that a custom map is designed well, so it's generally best to choose an existing, well-tested colormap. Here we will show the many different types of colormaps available, discussing each category and how to use that type of map. The ones shown here are those that are available by name, if the corresponding provider has been installed. E.g. those labelled \"(bokeh)\" will only be available if Bokeh is installed.\n\nMost of these colormaps will work best on *either* a light or a dark background, but not both. To faithfully and intuitively represent monotonically increasing values, you will generally want a colormap where the lowest values are similar in tone to the page background, and higher values become more perceptually salient compared to the page background. To let you match the colormap to the page, the maps listed below have a variant suffixed with `_r` (not shown), which is the same map but with the reverse order.\n\n\n```python\nfrom math import ceil\nfrom holoviews.plotting.util import process_cmap\n\ncolormaps = hv.plotting.list_cmaps()\nspacing = np.linspace(0, 1, 64)[np.newaxis]\nopt_kwargs = dict(aspect=6, xaxis=None, yaxis=None, sublabel_format='')\n\ndef filter_cmaps(category):\n return hv.plotting.util.list_cmaps(records=True,category=category,reverse=False)\n\ndef cmap_examples(category,cols=4):\n cms = filter_cmaps(category)\n n = len(cms)*1.0\n c=ceil(n/cols) if n>cols else cols\n bars = [hv.Image(spacing, ydensity=1, label=\"{0} ({1})\".format(r.name,r.provider))\\\n .opts(cmap=process_cmap(r.name,provider=r.provider), **opt_kwargs)\n for r in cms]\n return hv.Layout(bars).opts(vspace=0.1, hspace=0.1, transpose=(n>cols)).cols(c)\n```", "start_char_idx": 2, "end_char_idx": 1826, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cdd29e47-f21a-444b-9e4d-e9804ea5efb1": {"__data__": {"id_": "cdd29e47-f21a-444b-9e4d-e9804ea5efb1", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b7e81fbf-cbf2-4ebc-ae83-7bbbd66c18c1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4bbec756e8df8c63ae6f311bdeae8dfff97fa76cb910a324748ed758a70066f1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6b472920-55a2-4458-ae52-0bf3407a2377", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3a6ef6c5b172dca167e8f5661a97b7fe2c0640dc947c587fb7df4b31dff9efb8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a115f74d-f191-4f5a-b148-c1d8ff606b6a", "node_type": "1", "metadata": {}, "hash": "dee666efe24efe3fba9d7bb241a69273ccf5a55f6206c08784af0707e18b9f7a", "class_name": "RelatedNodeInfo"}}, "hash": "0ee35dff150226c5c6c17f7115cf7bd8bd4dc49d501a8067e1834dd4395278ab", "text": "Perceptually uniform sequential colormaps\n\nUseful for the typical case of having increasing numeric values that you want to distinguish without bias for any specific value. The colormaps in this category are designed to represent similar distances in value space (e.g. a numerical difference from 0.2 to 0.4, or one from 0.4 to 0.6, with similar differences in what we perceive visually). \n\nFor detailed discussions of this important issue, see\nKovesi,\nvan der Walt & Smith, and \nKarpov, who each argue for different color spaces and criteria for evaluating colormaps and thus develop different types of colormaps. Despite the disagreements over important details, *all* of the maps here will be significantly more uniform than an arbitrary map designed without perceptual criteria, such as those in \"Other Sequential\" below, and thus these colormaps represent good default choices in most cases.\n\nWhen choosing one of these, be sure to consider whether you wish your page background to be distinguishable from a color in the colormap. If your data covers the entire plot, then using the background color is fine, but if you need the background color to show through (e.g. to show missing values), then you should avoid maps that include black (`fire`, `magma`, `inferno`, `gray`, `k*`) on a black page or white (`fire`,`gray`) on a white page.\n\n\n```python\ncmap_examples('Uniform Sequential')\n```", "start_char_idx": 2, "end_char_idx": 1400, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a115f74d-f191-4f5a-b148-c1d8ff606b6a": {"__data__": {"id_": "a115f74d-f191-4f5a-b148-c1d8ff606b6a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "eebacd36-d1ae-4211-a612-9b0c6e6e8402", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3103f4e75cea1ac9241aa4caac2211e79a99517c53037f559a22b83fc9aed29c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cdd29e47-f21a-444b-9e4d-e9804ea5efb1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0ee35dff150226c5c6c17f7115cf7bd8bd4dc49d501a8067e1834dd4395278ab", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2670791c-f725-4655-95b3-491590872b2a", "node_type": "1", "metadata": {}, "hash": "0afe20af61a4c927f27a99757b8fe60eed217112a17c8e881c40d315110a00b1", "class_name": "RelatedNodeInfo"}}, "hash": "dee666efe24efe3fba9d7bb241a69273ccf5a55f6206c08784af0707e18b9f7a", "text": "Diverging colormaps\n\nUseful to highlight differences from a neutral central value, which is typically chosen to match the page background (e.g. white or yellow when using a white page, or black when using a black page). \n\nMost of the diverging maps listed here were *not* developed to match a definition of perceptual uniformity, but those coming from `colorcet` were and should thus be preferred over the rest (which can be obtained by specifying `Uniform Diverging` here).\n\nSome of these colormaps include both red and green, making them ambiguous for people with the most common types of colorblindness, and should thus be avoided where possible.\n\n\n```python\ncmap_examples('Diverging')\n```", "start_char_idx": 2, "end_char_idx": 695, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2670791c-f725-4655-95b3-491590872b2a": {"__data__": {"id_": "2670791c-f725-4655-95b3-491590872b2a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "62f93347-c3f5-4bcd-a866-7d73c672aafd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "db3546ce48001389a8d673cd81f7e2c91306f8ac0e9f4cdba02018539e6ed8b1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a115f74d-f191-4f5a-b148-c1d8ff606b6a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dee666efe24efe3fba9d7bb241a69273ccf5a55f6206c08784af0707e18b9f7a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b0e568da-e6ea-4cbb-805f-7bc387dc42f8", "node_type": "1", "metadata": {}, "hash": "54ddb3499a2716b922a2b12892873b3848791224a191225ce613b05857713bb8", "class_name": "RelatedNodeInfo"}}, "hash": "0afe20af61a4c927f27a99757b8fe60eed217112a17c8e881c40d315110a00b1", "text": "Rainbow colormaps\n\nRainbow-like colormaps convey value primarily through color rather than luminance. They result in eye-catching plots, but because rainbow colors form a continuous, cyclic spectrum, they can be ambiguous about which values are higher than the others. Most of them are also highly perceptually non-uniform, with pronounced banding that makes some values easily distinguished from their neighbors, and other wide ranges of values nearly indistinguishable (e.g. the greenish colors in the `gist_rainbow` and `jet` colormaps). \n\nIf you do want a rainbow colormap, please consider using one of the three perceptually uniform versions (category `Uniform Rainbow`) included here:\n\n- `colorwheel` (colorcet): for cyclic values like angles and longitudes that wrap around to the same value at the end of the range (notice that the lowest and highest colors are both blue)\n- `rainbow` (colorcet): for monotonically and uniformly increasing values (skips purple region to avoid ordering ambiguity)\n- `isolum` (colorcet): for monotonically and uniformly increasing values, but only uses hue changes, with a constant lightness. Nearly all the other maps are dominated by changes in lightness, which is much more perceptually salient than strict changes in hue as in this map. Useful as a counterpart and illustration of the role of lightness.\n\nOf course, rainbow colormaps have the disadvantage that they are inherently unsuitable for most colorblind viewers, because they require viewers to distinguish between red and green to determine value.\n\n\n```python\ncmap_examples('Rainbow')\n```", "start_char_idx": 2, "end_char_idx": 1597, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b0e568da-e6ea-4cbb-805f-7bc387dc42f8": {"__data__": {"id_": "b0e568da-e6ea-4cbb-805f-7bc387dc42f8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f364989d-88f6-49f6-978a-2b06bb3ee521", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fc52a7e31151b76776430f4213b351ce41de33156ffc97189ce79448319ef3f4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2670791c-f725-4655-95b3-491590872b2a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0afe20af61a4c927f27a99757b8fe60eed217112a17c8e881c40d315110a00b1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "731d71e5-5dca-448c-aa36-30c4b5c6538b", "node_type": "1", "metadata": {}, "hash": "7041764209a462f709dce39f57467ca116f18fd9eb09d6a4ed047d192f315811", "class_name": "RelatedNodeInfo"}}, "hash": "54ddb3499a2716b922a2b12892873b3848791224a191225ce613b05857713bb8", "text": "Categorical colormaps\n\nPrimarily useful as color cycles rather than colormaps, i.e. as a list of discrete color values, not a continuous range of colors. Will produce discrete banding when used on continuous values, like in a geographic contour plot, but if that effect is desired it's probably better to use `color_levels` with a sequential colormap to be able to control how many levels there are and give them a natural ordering.\n\nMost of these color sets are constructed by hand, with a relatively small number of distinct colors. If you want a larger number of colors, the `glasbey_` categorical maps from Colorcet are generated using a systematic procedure based on sampling a perceptual space for widely separated colors, which allows large numbers of categories to be distinguished from each other. \n\nThe `glasbey_hv` colors have the useful property that they share the same first 12 colors as the default HoloViews color cycle, which means that if you want the same colors as usual but with more available when needed, you can switch the HoloViews default using `hv.Cycle.default_cycles['default_colors']=colorcet.glasbey_hv`.\n\n\n```python\ncmap_examples('Categorical')\n```", "start_char_idx": 2, "end_char_idx": 1183, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "731d71e5-5dca-448c-aa36-30c4b5c6538b": {"__data__": {"id_": "731d71e5-5dca-448c-aa36-30c4b5c6538b", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a83cec2c-741a-43b8-8226-74fb4ee60714", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2e6ba3d003b080786f88f02cf6038dd743a863545a55885894607e14a193dbb1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b0e568da-e6ea-4cbb-805f-7bc387dc42f8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "54ddb3499a2716b922a2b12892873b3848791224a191225ce613b05857713bb8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6856ce5e-865e-475e-9a08-588760b38569", "node_type": "1", "metadata": {}, "hash": "140e9909b76a889e18527d9d68ce6189e61462536e207c20b3309e8192c76a4d", "class_name": "RelatedNodeInfo"}}, "hash": "7041764209a462f709dce39f57467ca116f18fd9eb09d6a4ed047d192f315811", "text": "Mono Sequential colormaps\n\nMonotonically increasing values that serve the same purpose as Uniform Sequential (above), but are not specifically constructed to be perceptually uniform. Useful when you want to fit into a particular visual theme or color scheme, or when you want to color entire plots differently from other entire plots (e.g. to provide a visual \"traffic light\" indicator for the entire plot, making some plots stand out relative to others). If you just need a single colormap, try to select a Uniform Sequential map instead of these.\n\n\n```python\ncmap_examples('Mono Sequential')\n```", "start_char_idx": 2, "end_char_idx": 600, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6856ce5e-865e-475e-9a08-588760b38569": {"__data__": {"id_": "6856ce5e-865e-475e-9a08-588760b38569", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d1af7bbc-e00d-43af-81bc-cca56fe53539", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f389544520afd309c26c0f8e2e14cf9b337e125d7f21f7236427b39b53a6dc8a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "731d71e5-5dca-448c-aa36-30c4b5c6538b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7041764209a462f709dce39f57467ca116f18fd9eb09d6a4ed047d192f315811", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "df514b50-556c-45b8-94c7-e94287ae6fcb", "node_type": "1", "metadata": {}, "hash": "a79b84798c04ce5e5b7c85070d79a10e648f264745632df301784fed35dba9c7", "class_name": "RelatedNodeInfo"}}, "hash": "140e9909b76a889e18527d9d68ce6189e61462536e207c20b3309e8192c76a4d", "text": "Other Sequential colormaps\n\nOther sequential colormaps are included, but are not meant for general use. Some of these have a very high degree of perceptual non-uniformity, making them highly misleading. E.g. the `hot` (matplotlib) colormap includes pronounced banding (with sharp perceptual discontinuities and long stretches of indistinguishable colors); consider using the perceptually uniform `fire` (colorcet) map instead. Others like `gray` largely duplicate maps in the other categories above, and so can cause confusion. The Uniform Sequential maps, or if necessary Mono Sequential, are generally good alternatives to these.\n\n\n```python\ncmap_examples('Other Sequential')\n```", "start_char_idx": 2, "end_char_idx": 684, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "df514b50-556c-45b8-94c7-e94287ae6fcb": {"__data__": {"id_": "df514b50-556c-45b8-94c7-e94287ae6fcb", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "72045606-e6fa-4e45-8b18-c0e723483269", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6726816b1b903a682b0a07ecf205b056f0cd0eaf7688c8a9bb2c7fb4f3227fcb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6856ce5e-865e-475e-9a08-588760b38569", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "140e9909b76a889e18527d9d68ce6189e61462536e207c20b3309e8192c76a4d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c21ec95d-dee9-4fd4-8f91-1fa89bb59779", "node_type": "1", "metadata": {}, "hash": "8bd745a2473ecc7ee42f45931ac5974db5bc24c9cfcc2ede77995fb64bf11446", "class_name": "RelatedNodeInfo"}}, "hash": "a79b84798c04ce5e5b7c85070d79a10e648f264745632df301784fed35dba9c7", "text": "Miscellaneous colormaps\n\nThere are a variety of other colormaps not fitting into the categories above, mostly of limited usefuless. Exceptions include the `flag` and `prism` (matplotlib) colormaps that could be useful for highlighting local changes in value (details), with no information about global changes in value (due to the repeating colors).\n\n\n```python\ncmap_examples('Miscellaneous')\n```\n\nSee the Styling_Plots user guide for how these colormaps can be used to control how your data is plotted.", "start_char_idx": 2, "end_char_idx": 505, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c21ec95d-dee9-4fd4-8f91-1fa89bb59779": {"__data__": {"id_": "c21ec95d-dee9-4fd4-8f91-1fa89bb59779", "embedding": null, "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b960c6e2-d801-4396-b826-6bcf5877c7d6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "26817d66cb253b92042f36d7d33edf50072dbc0fa9965c1519d343d2ed49bd23", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "df514b50-556c-45b8-94c7-e94287ae6fcb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a79b84798c04ce5e5b7c85070d79a10e648f264745632df301784fed35dba9c7", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1397da04-9c35-4fbb-abbc-8e95a13d8fc6", "node_type": "1", "metadata": {}, "hash": "e1fea9da047db5f3f159345754966560cefabd656afaa2b77abed50a50a9fc2c", "class_name": "RelatedNodeInfo"}}, "hash": "8bd745a2473ecc7ee42f45931ac5974db5bc24c9cfcc2ede77995fb64bf11446", "text": "Querying and filtering the list of colormaps\n\nFor most purposes, you can just pick one of the colormaps above for a given plot. However, HoloViews is very often used to build applications and dashboards, many of which include a \"colormap\" selection widget. Because there are so many colormaps available, most of which are inappropriate for any specific plot, it's useful to be able to pull up a list of all the colormaps that are suitable for the specific type of plot used in the app.\n\nTo allow such filtering, HoloViews stores the following information about each named colormap, matched by substring:\n\n- **name**: string name for the colormap\n- **category**: Type of map by intended use or purpose ('[Uniform|Mono|Other ]Sequential', '[Uniform ]Diverging', '[Uniform ]Rainbow', '[Uniform ]Categorical', or 'Miscellaneous')\n- **provider**: package offering the colormap ('matplotlib', 'bokeh', or 'colorcet')\n- **source**: original source or creator of the colormaps ('cet', 'colorbrewer', 'd3', 'bids','misc')\n- **bg**: base/background color expected for the map ('light','dark','medium','any')\n- **reverse**: whether the colormap name includes `_r` indicating that it is a reverse of a base map (True, False)\n\nThe `hv.plotting.list_cmaps()` function used above can select a subset of the available colormaps by filtering based on the above values:\n\n```\nlist_cmaps(provider, records, name, category, source, bg, reverse)\n```\n\nThe examples below should make it clear how to use this function.\n\n\n```python\nfrom holoviews.plotting import list_cmaps\ndef format_list(l):\n print(' '.join(sorted([k for k in l])))\n```\n\nAll named colormaps provided by `colorcet`, reversed:\n\n\n```python\nformat_list(list_cmaps(provider='colorcet',reverse=True))\n```\n\nAll non-reversed colormaps provided by `matplotlib` and originating from `d3` that have `20` in their names:\n\n\n```python\nformat_list(list_cmaps(name='20', source='d3', provider='matplotlib', reverse=False))\n```\n\nColormaps provided by Bokeh that are suitable for dark-colored (e.g. black) backgrounds:\n\n\n```python\nformat_list(list_cmaps(category='Other Sequential', bg='dark'))\n```\n\nNotice how some of these have `_r`, because those two natively start with light values and must be reversed to be suitable on a dark background. In this case the results for `bg='light'` are the complementary set of colormaps:\n\n\n```python\nformat_list(list_cmaps(category='Other Sequential', bg='light'))\n```\n\nHowever, `Diverging` colormaps do not change their background color when reversed, and so requesting a light or dark background gives different maps altogether (depending on their central color):\n\n\n```python\nformat_list(list_cmaps(category='Diverging', bg='dark'))\n```\n\n\n```python\nformat_list(list_cmaps(category='Diverging', bg='light'))\n```\n\nMatches are done by substring, so all sequential colormaps suitable for `dark` or `any` backgrounds can be obtained with:\n\n\n```python\nformat_list(list_cmaps(category='Sequential', bg='a'))\n```\n\nIn the examples above, `list_cmaps` is returning just the colormap name, but if you want to work with the filter information yourself to do more complex queries, you can ask that it return the full records as namedtuples instead:\n\n\n```python\nlist_cmaps(category=\"Uniform Sequential\", provider='bokeh', bg='light', records=True)\n```\n\nIn addition to populating GUI widgets, another way to use this filtering is to systematically evaluate how your plot will look with a variety of different colormaps of the same type:\n\n\n```python\nhv.Layout([img.relabel(c).opts(cmap=c, colorbar=False, sublabel_format='') \n for c in list_cmaps(category='Diverging', bg='light', reverse=False)][:14])\\\n .opts(vspace=0.1, hspace=0.1).cols(7)\n```\n\nYou could also consider filtering on the actual values in the colormap, perhaps to ensure that the specific background color you are using is not present in the colormap. For this you can use the `hv.plotting.util.process_cmap` function to look up the actual colormap values by name and provider.", "start_char_idx": 2, "end_char_idx": 4015, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1397da04-9c35-4fbb-abbc-8e95a13d8fc6": {"__data__": {"id_": "1397da04-9c35-4fbb-abbc-8e95a13d8fc6", "embedding": null, "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b6285e2e-fbf5-4430-a77c-4c5ad18a7b82", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "de0ca65f69830e00ca8aa4576b833ef45b1484f1301fb1112b3e53f10aa4d1fd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c21ec95d-dee9-4fd4-8f91-1fa89bb59779", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8bd745a2473ecc7ee42f45931ac5974db5bc24c9cfcc2ede77995fb64bf11446", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e161d825-90eb-473f-9deb-3a056084b7b2", "node_type": "1", "metadata": {}, "hash": "961661beea0c960e790040a9f4c20930d33642dc63d2c5d8e247a985170ea06e", "class_name": "RelatedNodeInfo"}}, "hash": "e1fea9da047db5f3f159345754966560cefabd656afaa2b77abed50a50a9fc2c", "text": "Continuous Coordinates\n\nHoloViews is designed to work with scientific and engineering data, which is often in the form of discrete samples from an underlying continuous system. Imaging data is one clear example: measurements taken at a regular interval over a grid covering a two-dimensional area. Although the measurements are discrete, they approximate a continuous distribution, and HoloViews provides extensive support for working naturally with data of this type.", "start_char_idx": 2, "end_char_idx": 472, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e161d825-90eb-473f-9deb-3a056084b7b2": {"__data__": {"id_": "e161d825-90eb-473f-9deb-3a056084b7b2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2ecc4df7-6d72-427c-8541-3a1740e2db96", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "38aabf667616472a0004f61248e7872b22d20d7c89f296da75b1afecf6a5c360", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1397da04-9c35-4fbb-abbc-8e95a13d8fc6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e1fea9da047db5f3f159345754966560cefabd656afaa2b77abed50a50a9fc2c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a5f65d4e-9325-4cd3-94b2-f249ccf2bc0c", "node_type": "1", "metadata": {}, "hash": "bbad07bafe272431f1aeb5999268d250ccdd17f37a8b0d5ce3b987183c5d6443", "class_name": "RelatedNodeInfo"}}, "hash": "961661beea0c960e790040a9f4c20930d33642dc63d2c5d8e247a985170ea06e", "text": "2D Continuous spaces\n\nIn this user guide we will show the support provided by HoloViews for working with two-dimensional regularly sampled grid data like images, and then in subsequent sections discuss how HoloViews supports one-dimensional, higher-dimensional, and irregularly sampled data with continuous coordinates.\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('bokeh')\n\nnp.set_printoptions(precision=2, linewidth=80)\nopts.defaults(opts.Layout(shared_axes=False))\n```\n\nFirst, let's consider: \n\n|||\n|:--------------:|:----------------|\n| **``f(x,y)``** | a simple function that accepts a location in a 2D plane specified in millimeters (mm) |\n| **``region``** | a 1mm×1mm square region of this 2D plane, centered at the origin, and |\n| **``coords``** | a function returning a square (s×s) grid of (x,y) coordinates regularly sampling the region in the given bounds, at the centers of each grid cell |\n||||\n\n\n\n\n```python\ndef f(x,y): \n return x+y/3.1\n \nregion=(-0.5,-0.5,0.5,0.5)\n\ndef coords(bounds,samples):\n l,b,r,t=bounds\n hc=0.5/samples\n return np.meshgrid(np.linspace(l+hc,r-hc,samples),\n np.linspace(b+hc,t-hc,samples))\n```\n\nNow let's build a Numpy array regularly sampling this function at a density of 5 samples per mm: \n\n\n```python\nf5=f(*coords(region,5))\nf5\n```\n\nWe can visualize this array (and thus the function ``f``) either using a ``Raster``, which uses the array's own integer-based coordinate system (which we will call \"array\" coordinates), or an ``Image``, which uses a continuous coordinate system, or as a ``HeatMap`` labelling each value explicitly:\n\n\n```python\nr5 = hv.Raster(f5, label=\"R5\")\ni5 = hv.Image( f5, label=\"I5\", bounds=region)\nh5 = hv.HeatMap([(x, y, round(f5[4-y,x],2)) for x in range(0,5) for y in range(0,5)], label=\"H5\")\n\nh5_labels = hv.Labels(h5).opts(padding=0)\n\nr5 + i5 + h5*h5_labels\n```\n\nBoth the ``Raster`` and ``Image`` ``Element`` types accept the same input data and show the same arrangement of colors, but a visualization of the ``Raster`` type reveals the underlying raw array indexing, while the ``Image`` type has been labelled with the coordinate system from which we know the data has been sampled. All ``Image`` operations work with this continuous coordinate system instead, while the corresponding operations on a ``Raster`` use raw array indexing.\n\nFor instance, all five of these indexing operations refer to the same element of the underlying Numpy array, i.e. the second item in the first row:\n\n\n```python\n\"r5[0,1]=%0.2f r5.data[0,1]=%0.2f i5[-0.2,0.4]=%0.2f i5[-0.24,0.37]=%0.2f i5.data[0,1]=%0.2f\" % \\\n(r5[1,0], r5.data[0,1], i5[-0.2,0.4], i5[-0.24,0.37], i5.data[0,1])\n```\n\nYou can see that the ``Raster`` and the underlying ``.data`` elements both use Numpy's raw integer indexing, while the ``Image`` uses floating-point values that are then mapped onto the appropriate array element.\n\nThis diagram should help show the relationships between the ``Raster`` coordinate system in the plot (which ranges from 0 at the top edge to 5 at the bottom), the underlying raw Numpy integer array indexes (labelling each dot in the **Array coordinates** figure), and the underlying **Continuous coordinates**:\n\n\n\nArray coordinates\nContinuous coordinates\n\n\n\n\n\n\n\nImportantly, although we used a 5×5 array in this example, we could substitute a much larger array with the same continuous coordinate system if we wished, without having to change any of our continuous indexes -- they will still point to the correct location in the continuous space:\n\n\n```python\nf10=f(*coords(region,10))\nf10\n```", "start_char_idx": 2, "end_char_idx": 3681, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a5f65d4e-9325-4cd3-94b2-f249ccf2bc0c": {"__data__": {"id_": "a5f65d4e-9325-4cd3-94b2-f249ccf2bc0c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2ecc4df7-6d72-427c-8541-3a1740e2db96", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "38aabf667616472a0004f61248e7872b22d20d7c89f296da75b1afecf6a5c360", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e161d825-90eb-473f-9deb-3a056084b7b2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "961661beea0c960e790040a9f4c20930d33642dc63d2c5d8e247a985170ea06e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e1b47384-115c-46fd-8afb-025f4185f5fd", "node_type": "1", "metadata": {}, "hash": "6a2079a0bc23d97d06a4de94491f44a07474a3828263f6f281789903d086dd2b", "class_name": "RelatedNodeInfo"}}, "hash": "bbad07bafe272431f1aeb5999268d250ccdd17f37a8b0d5ce3b987183c5d6443", "text": "Array coordinates\nContinuous coordinates\n\n\n\n\n\n\n\nImportantly, although we used a 5×5 array in this example, we could substitute a much larger array with the same continuous coordinate system if we wished, without having to change any of our continuous indexes -- they will still point to the correct location in the continuous space:\n\n\n```python\nf10=f(*coords(region,10))\nf10\n```\n\n\n```python\nr10 = hv.Raster(f10, label=\"R10\")\ni10 = hv.Image(f10, label=\"I10\", bounds=region)\nr10+i10\n```\n\nThe image now has higher resolution, but still visualizes the same underlying continuous function, now evaluated at 100 grid positions instead of 25:\n\n\n\nArray coordinates\nContinuous coordinates\n\n\n\n\n\n\n\nIndexing the exact same coordinates as above now gets very different results:\n\n\n```python\n\"r10[0,1]=%0.2f r10.data[0,1]=%0.2f i10[-0.2,0.4]=%0.2f i10[-0.24,0.37]=%0.2f i10.data[0,1]=%0.2f\" % \\\n(r10[1,0], r10.data[0,1], i10[-0.2,0.4], i10[-0.24,0.37], i10.data[0,1])\n```\n\nThe array-based indexes used by ``Raster`` and the Numpy array in ``.data`` still return the second item in the first row of the array, but this array element now corresponds to location (-0.35,0.4) in the continuous function, and so the value is different. These indexes thus do *not* refer to the same location in continuous space as they did for the other array density, because raw Numpy-based indexing is *not* independent of density or resolution.\n\nLuckily, the two continuous coordinates still return very similar values to what they did before, since they always return the value of the array element corresponding to the closest location in continuous space. They now return elements just above and to the right, or just below and to the left, of the earlier location, because the array now has a higher resolution with elements centered at different locations. \n\nIndexing in continuous coordinates always returns the value closest to the requested value, given the available resolution. Note that in the case of coordinates truly on the boundary between array elements (as for -0.2,0.4), the bounds of each array cell are taken as right exclusive and upper exclusive, and so (-0.2,0.4) returns array index (3,0).", "start_char_idx": 3297, "end_char_idx": 5515, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e1b47384-115c-46fd-8afb-025f4185f5fd": {"__data__": {"id_": "e1b47384-115c-46fd-8afb-025f4185f5fd", "embedding": null, "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "386cfdfb-1bcd-4b6d-b434-1651b6271bbe", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "480daf8cbddb85d85178dabd98512d1ba7c8f455d0e27d11f09b35db18220e1f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a5f65d4e-9325-4cd3-94b2-f249ccf2bc0c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bbad07bafe272431f1aeb5999268d250ccdd17f37a8b0d5ce3b987183c5d6443", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "21ecd05b-d546-4f51-9942-de046fc52bf7", "node_type": "1", "metadata": {}, "hash": "595e2d0ad5881b3c8cabe3bd9f62d7aa6915c3ca4eec2aed7006d230851893ff", "class_name": "RelatedNodeInfo"}}, "hash": "6a2079a0bc23d97d06a4de94491f44a07474a3828263f6f281789903d086dd2b", "text": "Slicing in 2D\n\nIn addition to indexing (looking up a value), slicing (selecting a region) works as expected in continuous space (see the Indexing and Selecting user guide for more explanation). For instance, we can ask for a slice from (-0.275,-0.0125) to (0.025,0.2885) in continuous coordinates:\n\n\n```python\nsl10=i10[-0.275:0.025,-0.0125:0.2885]\nsl10.data\n```\n\n\n```python\nsl10\n```\n\nThis slice has selected those array elements whose centers are contained within the specified continuous space. To do this, the continuous coordinates are first converted by HoloViews into the floating-point range (5.125,2.250) (2.125,5.250) of array coordinates, and all those elements whose centers are in that range are selected:\n\n\n\nArray coordinates\nContinuous coordinates\n\n\n\n\n\n\n\nSlicing also works for ``Raster`` elements, but it results in an object that always reflects the contents of the underlying Numpy array (i.e., always with the upper left corner labelled 0,0):\n\n\n```python\nr5[0:3,1:3] + r5[0:3,1:2]\n```\n\nHopefully these examples make it clear that if you are using data that is sampled from some underlying continuous system, you should use the continuous coordinates offered by HoloViews objects like ``Image`` so that your programs can be independent of the resolution or sampling density of that data, and so that your axes and indexes can be expressed naturally, using the actual units of the underlying continuous space. The data will still be stored in the same Numpy array, but now you can treat it consistently like the approximation to continuous values that it is.", "start_char_idx": 2, "end_char_idx": 1578, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "21ecd05b-d546-4f51-9942-de046fc52bf7": {"__data__": {"id_": "21ecd05b-d546-4f51-9942-de046fc52bf7", "embedding": null, "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8b1ef82c-4171-4c79-b119-18fa8cb38fb6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8a978f18013e01820e64934da34b38bfb4e10181240ebd112a21da4bbcc7788d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e1b47384-115c-46fd-8afb-025f4185f5fd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6a2079a0bc23d97d06a4de94491f44a07474a3828263f6f281789903d086dd2b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "54c37385-8def-45cc-ac78-721395df8c8f", "node_type": "1", "metadata": {}, "hash": "29b8ce7ad5416f21f38c531054ca0759d4d459ce523dfa29470d88301d31bd50", "class_name": "RelatedNodeInfo"}}, "hash": "595e2d0ad5881b3c8cabe3bd9f62d7aa6915c3ca4eec2aed7006d230851893ff", "text": "1D and nD Continuous coordinates\n\nAll of the above examples use the common case for visualizations of a two-dimensional regularly gridded continuous space, which is implemented in ``holoviews.core.sheetcoords.SheetCoordinateSystem``. \n\nSimilar continuous coordinates and slicing are also supported for ``Chart`` elements, such as ``Curve``s, but using a single index and allowing arbitrary irregular spacing, implemented in ``holoviews.elements.chart.Chart``. \n\nThey also work the same for the n-dimensional coordinates and slicing supported by the container types ``HoloMap``, ``NdLayout``, and ``NdOverlay``, implemented in ``holoviews.core.dimension.Dimensioned`` and again allowing arbitrary irregular spacing. \n\n``QuadMesh`` elements are similar but allow more general types of mapping between the underlying array and the continuous space, with arbitrary spacing along each of the axes or even over the entire array. See the ``QuadMesh`` element for more details.\n\nTogether, these powerful continuous-coordinate indexing and slicing operations allow you to work naturally and simply in the full *n*-dimensional space that characterizes your data and parameter values.", "start_char_idx": 2, "end_char_idx": 1177, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "54c37385-8def-45cc-ac78-721395df8c8f": {"__data__": {"id_": "54c37385-8def-45cc-ac78-721395df8c8f", "embedding": null, "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "084e1766-7ca0-40ea-87f3-c407d18b6188", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "38b826feb8d41ba748a09c8b09d7ee7eb1172e7b7efa2cf794514587ac68f48a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "21ecd05b-d546-4f51-9942-de046fc52bf7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "595e2d0ad5881b3c8cabe3bd9f62d7aa6915c3ca4eec2aed7006d230851893ff", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4b7efb6d-3241-4d62-966a-03f8bcf34225", "node_type": "1", "metadata": {}, "hash": "5b2d3cc5697c0a2e83ce5f69e8ee3b659328bdceb0c79b9a74d745b77daff0d5", "class_name": "RelatedNodeInfo"}}, "hash": "29b8ce7ad5416f21f38c531054ca0759d4d459ce523dfa29470d88301d31bd50", "text": "Sampling\n\nThe above examples focus on indexing and slicing, but as described in the Indexing and Selecting user guide there is another related operation supported for continuous spaces, called sampling. Sampling is similar to indexing and slicing, in that all of them can reduce the dimensionality of your data, but sampling is implemented in a general way that applies for any of the 1D, 2D, or nD datatypes. For instance, if we take our 10×10 array from above, we can ask for the value at a given location, which will come back as a ``Table``, i.e. a dictionary with one (key,value) pair:\n\n\n```python\ne10=i10.sample(x=-0.275, y=0.2885)\ne10.opts(height=75)\n```\n\nSimilarly, if we ask for the value of a given *y* location in continuous space, we will get a ``Curve`` with the array row closest to that *y* value in the ``Image`` 2D array returned as arrays of `x` values and the corresponding *z* value from the image:\n\n\n```python\nr10=i10.sample(y=0.2885)\nr10\n```\n\nThe same sampling syntax can be used on HoloViews objects with any number of continuous-coordinate dimensions, in each case returning a HoloViews object of the correct dimensionality. This support for working in continuous spaces makes it much more natural to work with HoloViews objects than directly with the underlying raw Numpy arrays, but the raw data always remains available when needed.", "start_char_idx": 2, "end_char_idx": 1370, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4b7efb6d-3241-4d62-966a-03f8bcf34225": {"__data__": {"id_": "4b7efb6d-3241-4d62-966a-03f8bcf34225", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "acd2d6c8-2b2c-421e-901e-7901e2ee9fb1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dffab15e65449b3134e67d5b212d9c4d2a192a766c0cb289fdc80ed8252eb304", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "54c37385-8def-45cc-ac78-721395df8c8f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "29b8ce7ad5416f21f38c531054ca0759d4d459ce523dfa29470d88301d31bd50", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c5df882c-96e6-4a40-a3df-6255e7414e16", "node_type": "1", "metadata": {}, "hash": "5776954c092c08a78cec4f29be3f1f9c765171f0a0426fc6ef8536e466f8a8cf", "class_name": "RelatedNodeInfo"}}, "hash": "5b2d3cc5697c0a2e83ce5f69e8ee3b659328bdceb0c79b9a74d745b77daff0d5", "text": "Customizing Plots\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import dim, opts\n\nhv.extension('bokeh', 'matplotlib')\n```\n\nThe HoloViews options system allows controlling the various attributes of a plot. While different plotting extensions like bokeh, matplotlib and plotly offer different features and the style options may differ, there are a wide array of options and concepts that are shared across the different extensions. Specifically this guide provides an overview on controlling the various aspects of a plot including titles, axes, legends and colorbars. \n\nPlots have an overall hierarchy and here we will break down the different components:\n\n* **Plot**: Refers to the overall plot which can consist of one or more axes\n - Titles: Using title formatting and providing custom titles\n - Background: Setting the plot background color\n - Font sizes: Controlling the font sizes on a plot\n - Legends: Controlling the position and styling of the legend\n - Plot hooks: Using custom hooks to modify plots\n* **Axes**: A set of axes provides scales describing the mapping between data and the space on screen\n - Types of axes:\n - Linear axes\n - Logarithmic axes\n - Datetime axes\n - Categorical axes\n - Axis position: Positioning and hiding axes\n - Inverting axes: Flipping the x-/y-axes and inverting an axis\n - Axis labels: Setting axis labels using dimensions and options\n - Axis ranges: Controlling axes ranges using dimensions, padding and options\n - Axis ticks: Controlling axis tick locations, labels and formatting\n - Twin axes: Enabling twin axes", "start_char_idx": 2, "end_char_idx": 1645, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c5df882c-96e6-4a40-a3df-6255e7414e16": {"__data__": {"id_": "c5df882c-96e6-4a40-a3df-6255e7414e16", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "44c24618-40b3-4523-b4f6-b06b099f7a98", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "31f24047dbc683a6915ddcd5428ce28564951abc6b26aa4592aab6ee6c1e1907", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4b7efb6d-3241-4d62-966a-03f8bcf34225", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5b2d3cc5697c0a2e83ce5f69e8ee3b659328bdceb0c79b9a74d745b77daff0d5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "858446b6-f48b-439d-a835-61be8c2e4bf5", "node_type": "1", "metadata": {}, "hash": "27792d7f68277edd7dc19020db884d4a5b9ed7ee34961b671eece9a1c429806d", "class_name": "RelatedNodeInfo"}}, "hash": "5776954c092c08a78cec4f29be3f1f9c765171f0a0426fc6ef8536e466f8a8cf", "text": "Customizing the plot", "start_char_idx": 2, "end_char_idx": 22, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "858446b6-f48b-439d-a835-61be8c2e4bf5": {"__data__": {"id_": "858446b6-f48b-439d-a835-61be8c2e4bf5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "982aff09-6e9d-449b-83d7-c176b56ecdb7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9426266f2f1528ae93275665abb35c78ada39db99e927e726d870822b7c8cfc2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c5df882c-96e6-4a40-a3df-6255e7414e16", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5776954c092c08a78cec4f29be3f1f9c765171f0a0426fc6ef8536e466f8a8cf", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4904536a-c4ca-4e75-b91e-c11245aa1679", "node_type": "1", "metadata": {}, "hash": "9c3022f774e5ec83647df22e9970dfe2869311a74ee58a544afbac297f209b2f", "class_name": "RelatedNodeInfo"}}, "hash": "27792d7f68277edd7dc19020db884d4a5b9ed7ee34961b671eece9a1c429806d", "text": "Title\n\nA plot's title is usually constructed using a formatter which takes the group and label along with the plots dimensions into consideration. The default formatter is:\n\n '{label} {group} {dimensions}'\n \nwhere the ``{label}`` and ``{group}`` are inherited from the objects group and label parameters and ``dimensions`` represent the key dimensions in a HoloMap/DynamicMap:\n\n\n```python\nhv.HoloMap({i: hv.Curve([1, 2, 3-i], group='Group', label='Label') for i in range(3)}, 'Value')\n```\n\nThe title formatter may however be overridden with an explicit title, which may include any combination of the three formatter variables:\n\n\n```python\nhv.Curve([1, 2, 3]).opts(title=\"Custom Title\")\n```", "start_char_idx": 2, "end_char_idx": 699, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4904536a-c4ca-4e75-b91e-c11245aa1679": {"__data__": {"id_": "4904536a-c4ca-4e75-b91e-c11245aa1679", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e23c03b7-b7df-456b-bde7-bdce4376f15b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dc8ca16f5ad824b0d5adcc862abfb76bf21c61fb71851bd887ff27c86fd8dbac", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "858446b6-f48b-439d-a835-61be8c2e4bf5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "27792d7f68277edd7dc19020db884d4a5b9ed7ee34961b671eece9a1c429806d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9d386391-5402-446c-9e5c-eb8d03f05de1", "node_type": "1", "metadata": {}, "hash": "dd78f2cc298e72df5243796c72b88f9bf67ab36685314fdb113294157ca1593c", "class_name": "RelatedNodeInfo"}}, "hash": "9c3022f774e5ec83647df22e9970dfe2869311a74ee58a544afbac297f209b2f", "text": "Background\n\nAnother option which can be controlled at the level of a plot is the background color which may be set using the `bgcolor` option:\n\n\n```python\nhv.Curve([1, 2, 3]).opts(bgcolor='lightgray')\n```", "start_char_idx": 2, "end_char_idx": 206, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9d386391-5402-446c-9e5c-eb8d03f05de1": {"__data__": {"id_": "9d386391-5402-446c-9e5c-eb8d03f05de1", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "af2e357f-51be-4f64-8c27-5922ee44a625", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9ada5e62aea61470ba81e8aabf447565ca1ce416df5962f6210cc2486beafca2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4904536a-c4ca-4e75-b91e-c11245aa1679", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9c3022f774e5ec83647df22e9970dfe2869311a74ee58a544afbac297f209b2f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f46ade73-dba3-4f6c-b5f1-cfa9a2b9b48b", "node_type": "1", "metadata": {}, "hash": "325e60d8b2490286bab4d1629a37b4a45adab7387dbd8f22262dd636df72132f", "class_name": "RelatedNodeInfo"}}, "hash": "dd78f2cc298e72df5243796c72b88f9bf67ab36685314fdb113294157ca1593c", "text": "Font sizes\n\nControlling the font sizes of a plot is very common so HoloViews provides a convenient option to set the ``fontsize``. The ``fontsize`` accepts a dictionary which allows supplying fontsizes for different components of the plot from the title, to the axis labels, ticks and legends. The full list of plot components that can be customized separately include:\n\n ['xlabel', 'ylabel', 'zlabel', 'labels', 'xticks', 'yticks', 'zticks', 'ticks', 'minor_xticks', 'minor_yticks', 'minor_ticks', 'title', 'legend', 'legend_title']\n\nLet's take a simple example customizing the title, the axis labels and the x/y-ticks separately:\n\n\n```python\nhv.Curve([1, 2, 3], label='Title').opts(fontsize={'title': 16, 'labels': 14, 'xticks': 6, 'yticks': 12})\n```", "start_char_idx": 2, "end_char_idx": 757, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f46ade73-dba3-4f6c-b5f1-cfa9a2b9b48b": {"__data__": {"id_": "f46ade73-dba3-4f6c-b5f1-cfa9a2b9b48b", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "249c84da-2dcf-43bf-9f08-8d45146acc0d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e7f3de3060a25c9bfe3cc000d5f71094088f2b76f640b641e784d9e6d5b15e85", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9d386391-5402-446c-9e5c-eb8d03f05de1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dd78f2cc298e72df5243796c72b88f9bf67ab36685314fdb113294157ca1593c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8171e91f-2cbb-4030-8dc9-484c8f5d3d4e", "node_type": "1", "metadata": {}, "hash": "114ab05c5e2df9b0061aa208a2c2ef19fb4106496cd5751b699419eb85c45fef", "class_name": "RelatedNodeInfo"}}, "hash": "325e60d8b2490286bab4d1629a37b4a45adab7387dbd8f22262dd636df72132f", "text": "Font scaling\n\nInstead of control each property individually it is often useful to scale all fonts by a constant factor, e.g. to produce a more legible plot for presentations and posters. The `fontscale` option will affect the title, axis labels, tick labels, and legend:\n\n\n```python\n(hv.Curve([1, 2, 3], label='A') * hv.Curve([3, 2, 1], label='B')).opts(fontscale=2, width=500, height=400, title='Title')\n```", "start_char_idx": 2, "end_char_idx": 410, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8171e91f-2cbb-4030-8dc9-484c8f5d3d4e": {"__data__": {"id_": "8171e91f-2cbb-4030-8dc9-484c8f5d3d4e", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "371ab62e-00d6-498a-b690-1428e8675da5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5e146f39293a8530aa5faf3a4321a72fdad09e0d31e345a097761cf15c203b3f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f46ade73-dba3-4f6c-b5f1-cfa9a2b9b48b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "325e60d8b2490286bab4d1629a37b4a45adab7387dbd8f22262dd636df72132f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8579c206-bd39-4bc5-9d0b-547642b957cd", "node_type": "1", "metadata": {}, "hash": "9bc0b07f487e60911069d7f9737b715af3a8fea4637faeb540a62696d3394352", "class_name": "RelatedNodeInfo"}}, "hash": "114ab05c5e2df9b0061aa208a2c2ef19fb4106496cd5751b699419eb85c45fef", "text": "Legend customization\n\nWhen overlaying plots with different labels, a legend automatically appears to differentiate elements in the overlay. This legend can be customized in several ways:\n\n- by **position**\n - by adjusting the legend location within the figure using the `legend_position` option (e.g. `legend_position='bottom_right'`)\n - by adjusting the legend location *outside* of the figure using the `legend_position` and `legend_offset` parameters (which then positions the legend in *screen* space) (e.g. `legend_position='right', legend_offset=(0, 200)`). **Note**: the `legend_position` option applies to `bokeh` and `matplotlib` backends but the `legend_offset` only applies to `bokeh`.\n- by **style**\n - by muting elements with `legend_muted=True` (applies only to the `bokeh` backend)\n - by putting the legend elements in a column layout with `legend_cols=True` or (`legend_cols=int` in matplotlib)\n \nThese customizations are demonstrated by the examples that follow.\n\nMoving the legend to the bottom right:\n\n\n```python\noverlay = (hv.Curve([1, 2, 3], label='A') * hv.Curve([3, 2, 1], label='B')).opts(width=500, height=400)\noverlay.opts(legend_position='bottom_right')\n```\n\nMoving the legend outside, to the right of the plot:\n\n\n```python\noverlay.opts(legend_position='right')\n```\n\nMoving the legend outside, to the right of the plot but offset it 200 pixels higher:\n\n\n```python\noverlay.opts(width=500, height=400, legend_position='right', legend_offset=(0, 200))\n```\n\nMuting the legend and laying the labels out as columns.\n\n\n```python\noverlay.opts(legend_muted=True, legend_cols=2)\n```", "start_char_idx": 2, "end_char_idx": 1616, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8579c206-bd39-4bc5-9d0b-547642b957cd": {"__data__": {"id_": "8579c206-bd39-4bc5-9d0b-547642b957cd", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c4fb3c50-4e4c-4404-add0-a6a906ac1e07", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c37b87b9c5ec9a4b02c26ed7758bb70c06128a402b20a893b8361b3be6d6db36", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8171e91f-2cbb-4030-8dc9-484c8f5d3d4e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "114ab05c5e2df9b0061aa208a2c2ef19fb4106496cd5751b699419eb85c45fef", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "91d96065-e559-4c05-8939-6aa595536421", "node_type": "1", "metadata": {}, "hash": "dfc85d0e9f16b0b395d6b729c7ccc4a6a3e88e06d7a876a9fe29b53d4b2f57a2", "class_name": "RelatedNodeInfo"}}, "hash": "9bc0b07f487e60911069d7f9737b715af3a8fea4637faeb540a62696d3394352", "text": "Plot hooks\n\nHoloViews does not expose every single option a plotting extension like matplotlib or bokeh provides, therefore it is sometimes necessary to dig deeper to achieve precisely the customizations one might need. One convenient way of doing so is to use plot hooks to modify the plot object directly. The hooks are applied after HoloViews is done with the plot, allowing for detailed manipulations of the backend specific plot object.\n\nThe signature of a hook has two arguments, the HoloViews `plot` object that is rendering the plot and the `element` being rendered. From there the hook can modify the objects in the plot's handles, which provides convenient access to various components of a plot or simply access the ``plot.state`` which corresponds to the plot as a whole, e.g. in this case we define colors for the x- and y-labels of the plot.\n\n\n```python\ndef hook(plot, element):\n print('plot.state: ', plot.state)\n print('plot.handles: ', sorted(plot.handles.keys()))\n plot.handles['xaxis'].axis_label_text_color = 'red'\n plot.handles['yaxis'].axis_label_text_color = 'blue'\n \nhv.Curve([1, 2, 3]).opts(hooks=[hook])\n```", "start_char_idx": 2, "end_char_idx": 1152, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "91d96065-e559-4c05-8939-6aa595536421": {"__data__": {"id_": "91d96065-e559-4c05-8939-6aa595536421", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "dce95373-dea3-496e-96fb-40302db73c2f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1b61e1ce5b23b9a88708e90dc128cfe23b2485f4c4c211bb961becd812a1ef33", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8579c206-bd39-4bc5-9d0b-547642b957cd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9bc0b07f487e60911069d7f9737b715af3a8fea4637faeb540a62696d3394352", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "17e1a5d4-d315-40cc-9f00-730237e2395c", "node_type": "1", "metadata": {}, "hash": "64ad711e11066758ce8f5527a0d3307f077b206d40d321406a40d8ed52ed0f0f", "class_name": "RelatedNodeInfo"}}, "hash": "dfc85d0e9f16b0b395d6b729c7ccc4a6a3e88e06d7a876a9fe29b53d4b2f57a2", "text": "Customizing axes\n\nControlling the axis scales is one of the most common changes to make to a plot, so we will provide a quick overview of the four main types of axes and then go into some more detail on how to control the axis labels, ranges, ticks and orientation.", "start_char_idx": 2, "end_char_idx": 267, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "17e1a5d4-d315-40cc-9f00-730237e2395c": {"__data__": {"id_": "17e1a5d4-d315-40cc-9f00-730237e2395c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2adf137d-2160-4b72-8c56-a351d0ed5261", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2bf2f91c74c563149e1f4c95dc15b6e2b74367bef44e4cabb3a400e4b7284b1c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "91d96065-e559-4c05-8939-6aa595536421", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dfc85d0e9f16b0b395d6b729c7ccc4a6a3e88e06d7a876a9fe29b53d4b2f57a2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ccf7e343-5395-4bd9-bf90-ae98a2118bb5", "node_type": "1", "metadata": {}, "hash": "6395bd1a7931eca5cabc0182f680b80bc55fc22d7a710130612d24707b538a7e", "class_name": "RelatedNodeInfo"}}, "hash": "64ad711e11066758ce8f5527a0d3307f077b206d40d321406a40d8ed52ed0f0f", "text": "Types of axes\n\nThere are four main types of axes supported across plotting backends, standard linear axes, log axes, datetime axes and categorical axes. In most cases HoloViews automatically detects the appropriate axis type to use based on the type of the data, e.g. numeric values use linear/log axes, date(time) values use datetime axes and string or other object types use categorical axes.", "start_char_idx": 2, "end_char_idx": 396, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ccf7e343-5395-4bd9-bf90-ae98a2118bb5": {"__data__": {"id_": "ccf7e343-5395-4bd9-bf90-ae98a2118bb5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2f2188a1-6786-4ea4-8264-8caf70c3ecfe", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a4f14dd204b7edf944491602fd1e65b5120faac709bb392375eb1b9c640adf75", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "17e1a5d4-d315-40cc-9f00-730237e2395c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "64ad711e11066758ce8f5527a0d3307f077b206d40d321406a40d8ed52ed0f0f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6952a03c-1a71-4b95-9c30-a37677f773b1", "node_type": "1", "metadata": {}, "hash": "7884350acc99321a5836337d668e5342ab23b728f74dfd9270499bba73dea990", "class_name": "RelatedNodeInfo"}}, "hash": "6395bd1a7931eca5cabc0182f680b80bc55fc22d7a710130612d24707b538a7e", "text": "Linear axes\n\nA linear axes is simply the default, as long as the data is numeric HoloViews will automatically use a linear axis on the plot.", "start_char_idx": 2, "end_char_idx": 142, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6952a03c-1a71-4b95-9c30-a37677f773b1": {"__data__": {"id_": "6952a03c-1a71-4b95-9c30-a37677f773b1", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "23cc853e-5902-4f96-ab2b-64cd2b50c23c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "905cc41fe43298458ebc270fe175d6d4c9ce0c6527dc2ae3bd3be5514102f5f2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ccf7e343-5395-4bd9-bf90-ae98a2118bb5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6395bd1a7931eca5cabc0182f680b80bc55fc22d7a710130612d24707b538a7e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "845dc911-e7d5-4c12-a4f2-00d4496e7472", "node_type": "1", "metadata": {}, "hash": "26409f2ceb369cb6ea636c35c4bc5020600b5b0d69cec9caafc458e15f233738", "class_name": "RelatedNodeInfo"}}, "hash": "7884350acc99321a5836337d668e5342ab23b728f74dfd9270499bba73dea990", "text": "Log axes\n\nWhen the data is exponential it is often useful to use log axes, which can be enabled using independent ``logx`` and ``logy`` options. This way both semi-log and log-log plots can be achieved:\n\n\n```python\nsemilogy = hv.Curve(np.logspace(0, 5), label='Semi-log y axes')\nloglog = hv.Curve((np.logspace(0, 5), np.logspace(0, 5)), label='Log-log axes')\n\nsemilogy.opts(logy=True) + loglog.opts(logx=True, logy=True, shared_axes=False)\n```", "start_char_idx": 2, "end_char_idx": 445, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "845dc911-e7d5-4c12-a4f2-00d4496e7472": {"__data__": {"id_": "845dc911-e7d5-4c12-a4f2-00d4496e7472", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d6876d80-a667-4d9b-9cd4-e1b8f83059aa", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fcc78026ff033dd3bb5a2eef241238ebbadf8977c84657e7b54a642472e48a25", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6952a03c-1a71-4b95-9c30-a37677f773b1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7884350acc99321a5836337d668e5342ab23b728f74dfd9270499bba73dea990", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "17ee0d31-abf4-4e9d-b7af-dd0808d25aee", "node_type": "1", "metadata": {}, "hash": "d9a296effcf83653df8fc5882670b30fa8f2a1076ecb77194a1486ba8ae8b3f4", "class_name": "RelatedNodeInfo"}}, "hash": "26409f2ceb369cb6ea636c35c4bc5020600b5b0d69cec9caafc458e15f233738", "text": "Datetime axes\n\nAll current plotting extensions allow plotting datetime data, if you ensure the dates array is of a valid datetime dtype.\n\n\n```python\nfrom bokeh.sampledata.stocks import GOOG, AAPL\n\ngoog_dates = np.array(GOOG['date'], dtype=np.datetime64)\naapl_dates = np.array(AAPL['date'], dtype=np.datetime64)\n\ngoog = hv.Curve((goog_dates, GOOG['adj_close']), 'Date', 'Stock Index', label='Google')\naapl = hv.Curve((aapl_dates, AAPL['adj_close']), 'Date', 'Stock Index', label='Apple')\n\n(goog * aapl).opts(width=600, legend_position='top_left')\n```", "start_char_idx": 2, "end_char_idx": 551, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "17ee0d31-abf4-4e9d-b7af-dd0808d25aee": {"__data__": {"id_": "17ee0d31-abf4-4e9d-b7af-dd0808d25aee", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4c3bd284-8395-4fbe-9945-3d2235a15ef9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e83bdd022bfc47ec07444e7bbd90ec57ee31f5a7ce06b46caec62ae4792b9a52", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "845dc911-e7d5-4c12-a4f2-00d4496e7472", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "26409f2ceb369cb6ea636c35c4bc5020600b5b0d69cec9caafc458e15f233738", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c5a42640-72ca-48f0-8ff7-29e695e0b367", "node_type": "1", "metadata": {}, "hash": "5c910a240986ae6df9dcab7a9c819908a850b57dad10a1f2703ea89549e49709", "class_name": "RelatedNodeInfo"}}, "hash": "d9a296effcf83653df8fc5882670b30fa8f2a1076ecb77194a1486ba8ae8b3f4", "text": "Categorical axes\n\nWhile the handling of categorical data handles significantly between plotting extensions the same basic concepts apply. If the data is a string type or other object type it is formatted as a string and each unique category is assigned a tick along the axis. When overlaying elements the categories are combined and overlaid appropriately.\n\nWhether an axis is categorical also depends on the Element type, e.g. a ``HeatMap`` always has two categorical axes while a ``Bars`` element always has a categorical x-axis. As a simple example let us create a set of points with categories along the x- and y-axes and render them on top of a `HeatMap` of th same data:\n\n\n```python\npoints = hv.Points([(chr(i+65), chr(j+65), i*j) for i in range(10) for j in range(10)], vdims='z')\n\nheatmap = hv.HeatMap(points)\n\n(heatmap * points).opts(\n opts.HeatMap(toolbar='above', tools=['hover']),\n opts.Points(tools=['hover'], size=dim('z')*0.3))\n```\n\nAs a more complex example which does not implicitly assume categorical axes due to the element type we will create a set of random samples indexed by categories from 'A' to 'E' using the ``Scatter`` Element and overlay them. Secondly we compute the mean and standard deviation for each category displayed using a set of ``ErrorBars`` and finally we overlay these two elements with a ``Curve`` representing the mean value . All these Elements respect the categorical index, providing us a view of the distribution of values in each category:\n\n\n```python\noverlay = hv.NdOverlay({group: hv.Scatter(([group]*100, np.random.randn(100)*(5-i)-i))\n for i, group in enumerate(['A', 'B', 'C', 'D', 'E'])})\n\nerrorbars = hv.ErrorBars([(k, el.reduce(function=np.mean), el.reduce(function=np.std))\n for k, el in overlay.items()])\n\ncurve = hv.Curve(errorbars)\n\n(errorbars * overlay * curve).opts(\n opts.ErrorBars(line_width=5), opts.Scatter(jitter=0.2, alpha=0.5, size=6, height=400, width=600))\n```\n\nCategorical axes are special in that they support multi-level nesting in some cases. Currently this is only supported for certain element types (BoxWhisker, Violin and Bars) but eventually all chart-like elements will interpret multiple key dimensions as a multi-level categorical hierarchy. To demonstrate this behavior consider the `BoxWhisker` plot below which support two-level nested categories:\n\n\n```python\ngroups = [chr(65+g) for g in np.random.randint(0, 3, 200)]\nboxes = hv.BoxWhisker((groups, np.random.randint(0, 5, 200), np.random.randn(200)),\n ['Group', 'Category'], 'Value').sort()\n\nboxes.opts(width=600)\n```", "start_char_idx": 2, "end_char_idx": 2636, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c5a42640-72ca-48f0-8ff7-29e695e0b367": {"__data__": {"id_": "c5a42640-72ca-48f0-8ff7-29e695e0b367", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c7b518f1-9d5a-450b-93e3-ef139d868681", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ce9d2b95c7c8466137ee10d0ed2eb69a130379670b5e94deed5d6c2adc00bee1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "17ee0d31-abf4-4e9d-b7af-dd0808d25aee", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d9a296effcf83653df8fc5882670b30fa8f2a1076ecb77194a1486ba8ae8b3f4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ccd709d2-0c5f-417e-8d57-5e4e61bce1c1", "node_type": "1", "metadata": {}, "hash": "bc94bfd53cc2c5998611adc8a6c83afa8d03ccbe55548c3a9c8739e8bbc01cd6", "class_name": "RelatedNodeInfo"}}, "hash": "5c910a240986ae6df9dcab7a9c819908a850b57dad10a1f2703ea89549e49709", "text": "Axis positions\n\nAxes may be hidden or moved to a different location using the ``xaxis`` and ``yaxis`` options, which accept `None`, `'right'`/`'bottom'`, `'left'`/`'top'` and `'bare'` as values.\n\n\n```python\nnp.random.seed(42)\nys = np.random.randn(101).cumsum(axis=0)\n\ncurve = hv.Curve(ys, ('x', 'x-label'), ('y', 'y-label'))\n\n(curve.relabel('No axis').opts(xaxis=None, yaxis=None) +\n curve.relabel('Bare axis').opts(xaxis='bare') +\n curve.relabel('Moved axis').opts(xaxis='top', yaxis='right'))\n```", "start_char_idx": 2, "end_char_idx": 500, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ccd709d2-0c5f-417e-8d57-5e4e61bce1c1": {"__data__": {"id_": "ccd709d2-0c5f-417e-8d57-5e4e61bce1c1", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e1560ab1-9ac0-442c-8429-1c8bde6cd676", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "10f392741589c80fe44c396deb73c81879c9808b3cdb344cc3ea38e2457f5948", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c5a42640-72ca-48f0-8ff7-29e695e0b367", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5c910a240986ae6df9dcab7a9c819908a850b57dad10a1f2703ea89549e49709", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ffb0ac26-1f6c-4a3d-bc0c-8def840f21e8", "node_type": "1", "metadata": {}, "hash": "11cb89bbef3e0f5041b7a0f2498b6d73e671cc4d5875a1499f550ee8ed66ca2d", "class_name": "RelatedNodeInfo"}}, "hash": "bc94bfd53cc2c5998611adc8a6c83afa8d03ccbe55548c3a9c8739e8bbc01cd6", "text": "Inverting axes\n\nAnother option to control axes is to invert the x-/y-axes using the ``invert_axes`` options, i.e. turn a vertical plot into a horizontal plot. Secondly each individual axis can be flipped left to right or upside down respectively using the ``invert_xaxis`` and ``invert_yaxis`` options.\n\n\n```python\nbars = hv.Bars([('Australia', 10), ('United States', 14), ('United Kingdom', 7)], 'Country')\n\n(bars.relabel('Invert axes').opts(invert_axes=True, width=400) +\n bars.relabel('Invert x-axis').opts(invert_xaxis=True) +\n bars.relabel('Invert y-axis').opts(invert_yaxis=True)).opts(shared_axes=False)\n```", "start_char_idx": 2, "end_char_idx": 616, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ffb0ac26-1f6c-4a3d-bc0c-8def840f21e8": {"__data__": {"id_": "ffb0ac26-1f6c-4a3d-bc0c-8def840f21e8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bb1c2868-95ab-4927-8d1e-0d39f19e92f3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b404d39679821d5c33402e1feaa840c944527ac212b4055d16140fb35550cabd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ccd709d2-0c5f-417e-8d57-5e4e61bce1c1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bc94bfd53cc2c5998611adc8a6c83afa8d03ccbe55548c3a9c8739e8bbc01cd6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "50a01a9d-0866-4ac3-9f71-f569eaa8b8d9", "node_type": "1", "metadata": {}, "hash": "bac49b1c2b2d5ba063da1ede045dd920ec90b098663334d4457b012bd3e38f13", "class_name": "RelatedNodeInfo"}}, "hash": "11cb89bbef3e0f5041b7a0f2498b6d73e671cc4d5875a1499f550ee8ed66ca2d", "text": "Axis labels\n\nOrdinarily axis labels are controlled using the dimension label, however explicitly ``xlabel`` and ``ylabel`` options make it possible to override the label at the plot level. Additionally the ``labelled`` option allows specifying which axes should be labelled at all, making it possible to hide axis labels:\n\n\n```python\n(curve.relabel('Dimension labels') +\n curve.relabel(\"xlabel='Custom x-label'\").opts(xlabel='Custom x-label') +\n curve.relabel('Unlabelled').opts(labelled=[]))\n```", "start_char_idx": 2, "end_char_idx": 498, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "50a01a9d-0866-4ac3-9f71-f569eaa8b8d9": {"__data__": {"id_": "50a01a9d-0866-4ac3-9f71-f569eaa8b8d9", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7c939eca-317c-4258-99cb-5c74a5659821", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6a2dcb2ceadb61e7ee6bc2b2c3b17e1a2c1065cfe7c368f6ec64c8e488b03c21", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ffb0ac26-1f6c-4a3d-bc0c-8def840f21e8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "11cb89bbef3e0f5041b7a0f2498b6d73e671cc4d5875a1499f550ee8ed66ca2d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4b25ccfb-f003-40af-a990-17acd9e0ecde", "node_type": "1", "metadata": {}, "hash": "395eea5d580338772a5b195bf9af428c43a8afce6fde2dc7b9c1669d771809ca", "class_name": "RelatedNodeInfo"}}, "hash": "bac49b1c2b2d5ba063da1ede045dd920ec90b098663334d4457b012bd3e38f13", "text": "Axis ranges\n\nThe ranges of a plot are ordinarily controlled by computing the data range and combining it with the dimension ``range`` and ``soft_range`` but they may also be padded or explicitly overridden using ``xlim`` and ``ylim`` options.", "start_char_idx": 2, "end_char_idx": 244, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4b25ccfb-f003-40af-a990-17acd9e0ecde": {"__data__": {"id_": "4b25ccfb-f003-40af-a990-17acd9e0ecde", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2dd3e5fc-c882-4447-9aa0-c2fd0ed465c2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dae36f57bd3ad147878f49bcae5b596be6999dd5960eb0f995ddfd155d9d9a05", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "50a01a9d-0866-4ac3-9f71-f569eaa8b8d9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bac49b1c2b2d5ba063da1ede045dd920ec90b098663334d4457b012bd3e38f13", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3ff8331c-b4dc-47ef-8d84-5ac60f0945b2", "node_type": "1", "metadata": {}, "hash": "7ff776d50cc6b95b3bdb33b9edbd6700a6afd4fd862d44cb73077024e17a888a", "class_name": "RelatedNodeInfo"}}, "hash": "395eea5d580338772a5b195bf9af428c43a8afce6fde2dc7b9c1669d771809ca", "text": "Dimension ranges\n\n* **data range**: The data range is computed by min and max of the dimension values\n* **range**: Hard override of the data range\n* **soft_range**: Soft override of the data range", "start_char_idx": 2, "end_char_idx": 198, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3ff8331c-b4dc-47ef-8d84-5ac60f0945b2": {"__data__": {"id_": "3ff8331c-b4dc-47ef-8d84-5ac60f0945b2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "767a1b8a-d0ec-40bc-aafc-23e7c71da3d9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c83d34c3ca242366c4a67d0747c73f01e35c521ea08ceef82f6f95a2db3b43a7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4b25ccfb-f003-40af-a990-17acd9e0ecde", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "395eea5d580338772a5b195bf9af428c43a8afce6fde2dc7b9c1669d771809ca", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "53e9de49-8e96-4b11-806a-af29197e8818", "node_type": "1", "metadata": {}, "hash": "a3e1759f5d7dfa50198234849155fbdf0b93a9b4dc53281953f4a6feaf896ce3", "class_name": "RelatedNodeInfo"}}, "hash": "7ff776d50cc6b95b3bdb33b9edbd6700a6afd4fd862d44cb73077024e17a888a", "text": "**Dimension.range**\n\nSetting the ``range`` of a Dimension overrides the data ranges, i.e. here we can see that despite the fact the data extends to x=100 the axis is cut off at 90:\n\n\n```python\ncurve.redim(x=hv.Dimension('x', range=(-10, 90)))\n```", "start_char_idx": 2, "end_char_idx": 248, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "53e9de49-8e96-4b11-806a-af29197e8818": {"__data__": {"id_": "53e9de49-8e96-4b11-806a-af29197e8818", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "205cb9a7-19c5-4edf-9234-630f474f42f8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "81f19a3b976642a52faa3d75ae47d270d48e222e46a77896be5ddbb49b9970d7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3ff8331c-b4dc-47ef-8d84-5ac60f0945b2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7ff776d50cc6b95b3bdb33b9edbd6700a6afd4fd862d44cb73077024e17a888a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6b0bdcf2-91b5-4eb6-a5d1-b963138c86b0", "node_type": "1", "metadata": {}, "hash": "f7557c3dc989165f8807514b99dd90feb3dfaf5432c18ac56c0ecbc2e4bee991", "class_name": "RelatedNodeInfo"}}, "hash": "a3e1759f5d7dfa50198234849155fbdf0b93a9b4dc53281953f4a6feaf896ce3", "text": "Dimension.soft_range\n\nDeclaringa ``soft_range`` on the other hand combines the data range and the supplied range, i.e. it will pick whichever extent is wider. Using the same example as above we can see it uses the -10 value supplied in the soft_range but also extends to 100, which is the upper bound of the actual data:\n\n\n```python\ncurve.redim(x=hv.Dimension('x', soft_range=(-10, 90)))\n```", "start_char_idx": 2, "end_char_idx": 393, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6b0bdcf2-91b5-4eb6-a5d1-b963138c86b0": {"__data__": {"id_": "6b0bdcf2-91b5-4eb6-a5d1-b963138c86b0", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "6d2f1656-b98a-42ee-acda-300ab8a0f2b7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "792cab8ef16de1b80e59bda8bc65168f828c87698e905b854b6ccc7130166b15", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "53e9de49-8e96-4b11-806a-af29197e8818", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a3e1759f5d7dfa50198234849155fbdf0b93a9b4dc53281953f4a6feaf896ce3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "db8e95ea-2d1f-42fb-9fc9-8aa281618e27", "node_type": "1", "metadata": {}, "hash": "abae13c7913699c7f0d9d4dd54c5055232dd35749f373cf43ca5e270308c6a33", "class_name": "RelatedNodeInfo"}}, "hash": "f7557c3dc989165f8807514b99dd90feb3dfaf5432c18ac56c0ecbc2e4bee991", "text": "Padding\n\nApplying padding to the ranges is an easy way to ensure that the data is not obscured by the margins. The padding is specified by the fraction by which to increase auto-ranged extents to make datapoints more visible around borders. The default for most elements is `padding=0.1`. The padding considers the width and height of the plot to keep the visual extent of the padding equal. The padding values can be specified with three levels of detail:\n\n* 1. A single numeric value (e.g. ``padding=0.1``)\n* 2. A tuple specifying the padding for the x/y(/z) axes respectively (e.g. ``padding=(0, 0.1)``)\n* 3. A tuple of tuples specifying padding for the lower and upper bound respectively (e.g. ``padding=(0, (0, 0.1))``)\n\n\n```python\n(curve.relabel('Pad both axes').opts(padding=0.1) +\n curve.relabel('Pad y-axis').opts(padding=(0, 0.1)) +\n curve.relabel('Pad y-axis upper bound').opts(padding=(0, (0, 0.1)))).opts(shared_axes=False)\n```", "start_char_idx": 2, "end_char_idx": 942, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "db8e95ea-2d1f-42fb-9fc9-8aa281618e27": {"__data__": {"id_": "db8e95ea-2d1f-42fb-9fc9-8aa281618e27", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "01f5f8e2-1f2e-47df-9cb8-c10a5f7be7fd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a0643812f7d9e0a6d276621b6b3970942e2472b76146172d2e623908531e6e96", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6b0bdcf2-91b5-4eb6-a5d1-b963138c86b0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f7557c3dc989165f8807514b99dd90feb3dfaf5432c18ac56c0ecbc2e4bee991", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3a2495f8-11bf-4407-af26-41ec58ae83ac", "node_type": "1", "metadata": {}, "hash": "7ed2d94f766274c699390b38e38af4311d432711dbd7cc319a377c13a31482d1", "class_name": "RelatedNodeInfo"}}, "hash": "abae13c7913699c7f0d9d4dd54c5055232dd35749f373cf43ca5e270308c6a33", "text": "xlim/ylim\n\nThe data ranges, dimension ranges and padding combine across plots in an overlay to ensure that all the data is contained in the viewport. In some cases it is more convenient to override the ranges with explicit ``xlim`` and ``ylim`` options which have the highest precedence and will be respected no matter what.\n\n\n```python\ncurve.relabel('Explicit xlim/ylim').opts(xlim=(-10, 110), ylim=(-14, 6))\n```", "start_char_idx": 2, "end_char_idx": 415, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3a2495f8-11bf-4407-af26-41ec58ae83ac": {"__data__": {"id_": "3a2495f8-11bf-4407-af26-41ec58ae83ac", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "275c3805-a2b5-45fa-9e53-ceeedb461dbb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e2fd760c417fccf25788bdfa8f3f7f29b26cf3dcbea29dec4e46fe9df4e72017", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "db8e95ea-2d1f-42fb-9fc9-8aa281618e27", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "abae13c7913699c7f0d9d4dd54c5055232dd35749f373cf43ca5e270308c6a33", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "13124bd5-c264-4d1f-8060-996e3d03a581", "node_type": "1", "metadata": {}, "hash": "134cce5602cf95b340e46a35b6557572ae91c7b5a112f192af78075ace74e702", "class_name": "RelatedNodeInfo"}}, "hash": "7ed2d94f766274c699390b38e38af4311d432711dbd7cc319a377c13a31482d1", "text": "Autoranging\n\nWith the `autorange` keyword, you can ensure the data in the viewport is automatically ranged to maximise the use of the x- or y-axis. To illustrate, here is the same `curve` autoranging on the `y-axis`: note the difference in behavior when zooming into the data:\n\n\n```python\ncurve.relabel('Autoranging on y').opts(autorange='y')\n```\n\nTo pin the ends of the ranges you can use the `xlim` and `ylim` options, using a value of `None` to allow autoranging to operate. Here the bottom range of the y-axis is pinned to the value of `-14`:\n\n\n```python\ncurve.relabel('Autoranging on y with set lower limit').opts(autorange='y', ylim=(-14,None))\n```\n\nAutoranging works analogously for the x-axis and also respects the padding setting. In addition, autoranging is triggered when the plotted data is updated dynamically, as is common when building interactive visualizations with operations or `DynamicMap`s.", "start_char_idx": 2, "end_char_idx": 913, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "13124bd5-c264-4d1f-8060-996e3d03a581": {"__data__": {"id_": "13124bd5-c264-4d1f-8060-996e3d03a581", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2ac14eb3-fd15-4040-8bc9-8b361ba5f49c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "665de226cea1faaf6c7b0dc4ec92ad73da6ec9b907208c1beacb7880e42b89a9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3a2495f8-11bf-4407-af26-41ec58ae83ac", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7ed2d94f766274c699390b38e38af4311d432711dbd7cc319a377c13a31482d1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "37841e7d-854e-4d4e-b656-688f7d7c45a4", "node_type": "1", "metadata": {}, "hash": "d34a7b7b2b1893c7ddae1da062384d12fab0509c01ff5fe62e38bf31618307d2", "class_name": "RelatedNodeInfo"}}, "hash": "134cce5602cf95b340e46a35b6557572ae91c7b5a112f192af78075ace74e702", "text": "Axis ticks\n\nSetting tick locations differs a little bit depending on the plotting extension, interactive backends such as bokeh or plotly dynamically update the ticks, which means fixed tick locations may not be appropriate and the formatters have to be applied in Javascript code. Nevertheless most options to control the ticking are consistent across extensions.", "start_char_idx": 2, "end_char_idx": 366, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "37841e7d-854e-4d4e-b656-688f7d7c45a4": {"__data__": {"id_": "37841e7d-854e-4d4e-b656-688f7d7c45a4", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0d6633dd-c16d-4905-b269-2740811a85b6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "497c0acc382b82448e27417ed351203efd6f9990f2311477aa74f5360b3c83ab", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "13124bd5-c264-4d1f-8060-996e3d03a581", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "134cce5602cf95b340e46a35b6557572ae91c7b5a112f192af78075ace74e702", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "edd00660-4e4d-4306-856f-bb1ad543e8f0", "node_type": "1", "metadata": {}, "hash": "7825706a4598ee2f11ab8f1c5decf678c951886e53794505aae4516fcaa96133", "class_name": "RelatedNodeInfo"}}, "hash": "d34a7b7b2b1893c7ddae1da062384d12fab0509c01ff5fe62e38bf31618307d2", "text": "Tick locations\n\nThe number and locations of ticks can be set in three main ways:\n\n* Number of ticks: Declare the number of desired ticks as an integer\n* List of tick positions: An explicit list defining the list of positions at which to draw a tick\n* List of tick positions and labels: A list of tuples of the form (position, label)\n\n\n```python\n(curve.relabel('N ticks (xticks=10)').opts(xticks=10) +\n curve.relabel('Listed ticks (xticks=[0, 1, 2])').opts(xticks=[0, 50, 100]) +\n curve.relabel(\"Tick labels (xticks=[(0, 'zero'), ...\").opts(xticks=[(0, 'zero'), (50, 'fifty'), (100, 'one hundred')]))\n```\n\nLastly each extension will accept the custom Ticker objects the library provides, which can be used to achieve layouts not usually available.", "start_char_idx": 2, "end_char_idx": 748, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "edd00660-4e4d-4306-856f-bb1ad543e8f0": {"__data__": {"id_": "edd00660-4e4d-4306-856f-bb1ad543e8f0", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b4344d7c-1af4-4822-8ff6-d377692f14fd", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "63d67022f17313323833fff127f0086f90fdf6333333095fd7c2c0451ca60fc0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "37841e7d-854e-4d4e-b656-688f7d7c45a4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d34a7b7b2b1893c7ddae1da062384d12fab0509c01ff5fe62e38bf31618307d2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "50bdbece-7d26-400b-a0eb-4c7156c174e1", "node_type": "1", "metadata": {}, "hash": "f79d54089411a5c79d597154b7706f4753e74307181c69976eb69220853fcc12", "class_name": "RelatedNodeInfo"}}, "hash": "7825706a4598ee2f11ab8f1c5decf678c951886e53794505aae4516fcaa96133", "text": "Tick formatters\n\nTick formatting works very differently in different backends, however the ``xformatter`` and ``yformatter`` options try to minimize these differences. Tick formatters may be defined in one of three formats:\n\n* A classic format string such as ``'%d'``, ``'%.3f'`` or ``'%d'`` which may also contain other characters (``'$%.2f'``)\n* A ``bokeh.models.TickFormatter`` in bokeh and a ``matplotlib.ticker.Formatter`` instance in matplotlib\n\nHere is a small example demonstrating how to use the string approaches:\n\n\n```python\ncurve.relabel('Tick formatters').opts(xformatter='%.0f days', yformatter='$%.2f', width=500)\n```", "start_char_idx": 2, "end_char_idx": 634, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "50bdbece-7d26-400b-a0eb-4c7156c174e1": {"__data__": {"id_": "50bdbece-7d26-400b-a0eb-4c7156c174e1", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "dc96d952-3b21-4860-883f-572edde32940", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "50a010d903f23da52b8e529b69211c312456357dfa9ddf19fa18a7d5b5c820b8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "edd00660-4e4d-4306-856f-bb1ad543e8f0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7825706a4598ee2f11ab8f1c5decf678c951886e53794505aae4516fcaa96133", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2ce31f21-0010-4d52-9c25-9026cecb33a3", "node_type": "1", "metadata": {}, "hash": "02b10a0d7d23d712036e7ec882910d0b3b1f59443502b794334253a73e1cea66", "class_name": "RelatedNodeInfo"}}, "hash": "f79d54089411a5c79d597154b7706f4753e74307181c69976eb69220853fcc12", "text": "Tick orientation\n\nParticularly when dealing with categorical axes it is often useful to control the tick rotation. This can be achieved using the ``xrotation`` and ``yrotation`` options which accept angles in degrees.\n\n\n```python\nbars.opts(xrotation=45)\n```", "start_char_idx": 2, "end_char_idx": 259, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2ce31f21-0010-4d52-9c25-9026cecb33a3": {"__data__": {"id_": "2ce31f21-0010-4d52-9c25-9026cecb33a3", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7bc3e66c-aa18-492a-89aa-b809432dd3fe", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b39ba9fbe551cdbf967f2ac4b6eafdeae1429b95a2a8570d832e082e82ac5f10", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "50bdbece-7d26-400b-a0eb-4c7156c174e1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f79d54089411a5c79d597154b7706f4753e74307181c69976eb69220853fcc12", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a7c3028e-979d-4ad8-bcb8-548f5b24b5a7", "node_type": "1", "metadata": {}, "hash": "151fbececd595b030f04874d58020b13ba1cb50cb863b4a3ccadeaed5ddda422", "class_name": "RelatedNodeInfo"}}, "hash": "02b10a0d7d23d712036e7ec882910d0b3b1f59443502b794334253a73e1cea66", "text": "Twin axes\n*(Available in HoloViews >= 1.17, requires Bokeh >=3.2)*\n\nHoloViews now supports displaying overlays containing two different value dimensions as twin axes for chart elements. To maintain backwards compatibility, this feature is only enabled by setting the `multi_y=True` option on the overlay.\n\nTo illustrate, here is an overlay containing three curves with two value dimensions ('A' and 'B'). Setting `multi_y=True` then maps these two value dimensions to twin-axes:\n\n\n```python\noverlay = hv.Curve([1, 2, 3], vdims=['A']) * hv.Curve([2, 3, 4], vdims=['A']) * hv.Curve([3, 2, 1], vdims=['B'])\noverlay.opts(multi_y=True)\n```\n\nAdditional value dimensions do map to additional axes but be aware that support of multi axes beyond twin axes is currently considered experimental.\n\nThe first value dimension is mapped to the left-hand axis and the second value dimension maps to the right axis. Note that the two axes are individually zoomable by hovering over them and using the Bokeh wheelzoom tool.", "start_char_idx": 2, "end_char_idx": 1007, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a7c3028e-979d-4ad8-bcb8-548f5b24b5a7": {"__data__": {"id_": "a7c3028e-979d-4ad8-bcb8-548f5b24b5a7", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8a2ad419-0210-4b79-8bc2-1a0113009712", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bd957cf34687195f22eb184471aeed342b000ff321c1bf1ca20c697197e902ef", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2ce31f21-0010-4d52-9c25-9026cecb33a3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "02b10a0d7d23d712036e7ec882910d0b3b1f59443502b794334253a73e1cea66", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "901feeb7-7a1e-4c6d-9355-8dccaac750f5", "node_type": "1", "metadata": {}, "hash": "bbdd0393e6acc73511d0690e9240fa198e44d21a97180270674c453ac4db02cd", "class_name": "RelatedNodeInfo"}}, "hash": "151fbececd595b030f04874d58020b13ba1cb50cb863b4a3ccadeaed5ddda422", "text": "Supported `multi_y` options\n\nWhen `multi_y` is enabled, you can set individual axis options on the elements of the overlay.\n\nIn this example, the left axis uses the default options while the right axis is an inverted, autoranged, log axis with a set `ylim`:\n\n\n```python\n(hv.Curve([1, 2, 3], vdims=['A']) \n * hv.Curve([2, 3, 4], vdims=['B']).opts(autorange='y', invert_yaxis=True, logy=True, ylim=(1,10), \n ylabel='B custom', fontsize={'ylabel':10})\n).opts(multi_y=True)\n```\n\nSupported options for customizing individual axes are `apply_ranges`, `autorange='y'`, `invert_yaxis`, `logy` and `ylim`, `yaxis` as well as the following options for labelling: `labelled`, `ylabel` and the `'ylabel'` setting in `fontsize`.\n\nNote that as of HoloViews 1.17.0, `multi_y` does not have streaming plot support, extra axis labels are not dynamic and only the `RangeXY` linked stream is aware of additional y-axes.", "start_char_idx": 2, "end_char_idx": 942, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "901feeb7-7a1e-4c6d-9355-8dccaac750f5": {"__data__": {"id_": "901feeb7-7a1e-4c6d-9355-8dccaac750f5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5142cbcf-672a-4792-90f4-2bc3b1344651", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7fe8bc453f972df5ab0600d18eeb804d5579da2b087eabd57bf284d5e2f5bc0c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a7c3028e-979d-4ad8-bcb8-548f5b24b5a7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "151fbececd595b030f04874d58020b13ba1cb50cb863b4a3ccadeaed5ddda422", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e02992d1-b98a-4460-a3cb-89982d0a67ba", "node_type": "1", "metadata": {}, "hash": "94bcc496e663ae8e91728675114d03e285ed038f367426eebf351954bbf84b9f", "class_name": "RelatedNodeInfo"}}, "hash": "bbdd0393e6acc73511d0690e9240fa198e44d21a97180270674c453ac4db02cd", "text": "Subcoordinate y-axis\n*(Available in HoloViews >= 1.18)*\n\nHoloViews enables you to create overlays where each element has its own distinct y-axis subcoordinate system. To activate this feature, set the `subcoordinate_y` keyword to True for **each** overlay element; the default is False. When using `subcoordinate_y=True`, setting a `label` for each element is required for proper rendering and identification.This will automatically distribute overlay elements along the y-axis.\n\nFor more fine-grained control over y-axis positioning, you can specify a numerical 2-tuple for subcoordinate_y with values ranging from 0 to 1. Additionally, the `subcoordinate_scale` keyword, which defaults to 1, allows you to adjust the vertical scale of each element. This option is only applicable when `subcoordinate_y=True`. For example, setting a single Curve's `subcoordinate_scale` to 2 will result in it overlapping 50% with its adjacent elements.\n\n\n```python\nx = np.linspace(0, 10*np.pi)\n\ncurves = [\n hv.Curve((x + i*np.pi/2, np.sin(x)), label=f'Line {i}').opts(subcoordinate_y=True, subcoordinate_scale=1.2)\n for i in range(3)\n]\n\nhv.Overlay(curves).opts(show_legend=False)\n```", "start_char_idx": 2, "end_char_idx": 1176, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e02992d1-b98a-4460-a3cb-89982d0a67ba": {"__data__": {"id_": "e02992d1-b98a-4460-a3cb-89982d0a67ba", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a26ecffd-a8c4-42ec-b47d-7988ecf68516", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "713a969beeca4293199dd03ae96194d1a93b46eedc4ae293142ceee2a8ea6c09", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "901feeb7-7a1e-4c6d-9355-8dccaac750f5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bbdd0393e6acc73511d0690e9240fa198e44d21a97180270674c453ac4db02cd", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "9a61f722-cb16-480c-9abb-f14269ee8cd3", "node_type": "1", "metadata": {}, "hash": "a2a97471233e14318429a81309baba57440d18ab7496b193b5423f0496c744fb", "class_name": "RelatedNodeInfo"}}, "hash": "94bcc496e663ae8e91728675114d03e285ed038f367426eebf351954bbf84b9f", "text": "Deploying Bokeh Apps\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nhv.extension('bokeh')\n```", "start_char_idx": 2, "end_char_idx": 102, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "9a61f722-cb16-480c-9abb-f14269ee8cd3": {"__data__": {"id_": "9a61f722-cb16-480c-9abb-f14269ee8cd3", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "abdb1f43-a212-424a-8bd4-5f74f15b0a1f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0369aa824ef9a23b38210b23c62ebd57ecbedd215a4dac2b53aba5478edf47b5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e02992d1-b98a-4460-a3cb-89982d0a67ba", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "94bcc496e663ae8e91728675114d03e285ed038f367426eebf351954bbf84b9f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e3eeaef8-b938-4996-b0e9-0b0f7e38dbbc", "node_type": "1", "metadata": {}, "hash": "9ba5dbfc92e643bd76ccce76c1a72b1c5931d1147b2879a9a134bdfd1add6111", "class_name": "RelatedNodeInfo"}}, "hash": "a2a97471233e14318429a81309baba57440d18ab7496b193b5423f0496c744fb", "text": "Purpose\n\nHoloViews is an incredibly convenient way of working interactively and exploratively within a notebook or commandline context. However, once you have implemented a polished interactive dashboard or some other complex interactive visualization, you will often want to deploy it outside the notebook to share with others who may not be comfortable with the notebook interface. \n\nIn the simplest case, to visualize some HoloViews container or element `obj`, you can export it to a standalone HTML file for sharing using the `save` function of the Bokeh renderer:\n\n```\nhv.save(obj, 'out.html')\n```\n\nThis command will generate a file `out.html` that you can put on any web server, email directly to colleagues, etc.; it is fully self-contained and does not require any Python server to be installed or running. \n\nUnfortunately, a static approach like this cannot support any HoloViews object that uses DynamicMap (either directly or via operations that return DynamicMaps like `decimate`, `datashade`, and `rasterize`). Anything with DynamicMap requires a live, running Python server to dynamically select and provide the data for the various parameters that can be selected by the user. Luckily, when you need a live Python process during the visualization, the Bokeh server provides a very convenient way of deploying HoloViews plots and interactive dashboards in a scalable and flexible manner. The Bokeh server allows all the usual interactions that HoloViews lets you define and more including:\n\n* responding to plot events and tool interactions via Linked Streams\n* generating and interacting with plots via the usual widgets that HoloViews supports for HoloMap and DynamicMap objects.\n* using periodic and timeout events to drive plot updates\n* combining HoloViews plots with custom Bokeh plots to quickly write highly customized apps.", "start_char_idx": 2, "end_char_idx": 1850, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e3eeaef8-b938-4996-b0e9-0b0f7e38dbbc": {"__data__": {"id_": "e3eeaef8-b938-4996-b0e9-0b0f7e38dbbc", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5f9fba4b-72aa-40d6-8206-36f011a41efb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b34f9c2b774c1a3b0f68e49c4005feea53d80bb082e12bbfa638db3fc63908fc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "9a61f722-cb16-480c-9abb-f14269ee8cd3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a2a97471233e14318429a81309baba57440d18ab7496b193b5423f0496c744fb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a1fb4498-dfe4-4315-883b-46b3b71de77e", "node_type": "1", "metadata": {}, "hash": "e69a655001bfab3d892e8f4a667325edf95f384b1485b0e39cc5cf20c6c85ea4", "class_name": "RelatedNodeInfo"}}, "hash": "9ba5dbfc92e643bd76ccce76c1a72b1c5931d1147b2879a9a134bdfd1add6111", "text": "Overview\n\nIn this guide we will cover how we can deploy a Bokeh app from a HoloViews plot in a number of different ways:\n\n1. Inline from within the Jupyter notebook\n\n2. Starting a server interactively and open it in a new browser window.\n\n3. From a standalone script file\n\n4. Combining HoloViews and Bokeh models to create a more customized app\n\nIf you have read a bit about HoloViews you will know that HoloViews objects are not themselves plots, instead they contain sufficient data and metadata allowing them to be rendered automatically in a notebook context. In other words, when a HoloViews object is evaluated a backend specific ``Renderer`` converts the HoloViews object into Bokeh models, a Matplotlib figure or a Plotly graph. This intermediate representation is then rendered as an image or as HTML with associated Javascript, which is what ends up being displayed.", "start_char_idx": 2, "end_char_idx": 878, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a1fb4498-dfe4-4315-883b-46b3b71de77e": {"__data__": {"id_": "a1fb4498-dfe4-4315-883b-46b3b71de77e", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3878b1fb-4eff-48d2-8652-bb6456f9c205", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8d4d25f75dd66c1bcf3787705b6b855d27b188e7b7034a815c964fa2f5233ab4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e3eeaef8-b938-4996-b0e9-0b0f7e38dbbc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9ba5dbfc92e643bd76ccce76c1a72b1c5931d1147b2879a9a134bdfd1add6111", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "65418be6-d2c0-45d2-abae-9c63c7f5034c", "node_type": "1", "metadata": {}, "hash": "cb787c9eeeb61cb18cc199ca0f993ef6891cae0bf976e507a7a05d6e604f804b", "class_name": "RelatedNodeInfo"}}, "hash": "e69a655001bfab3d892e8f4a667325edf95f384b1485b0e39cc5cf20c6c85ea4", "text": "The workflow\n\nThe most convenient way to work with HoloViews is to iteratively improve a visualization in the notebook. Once you have developed a visualization or dashboard that you would like to deploy you can use the ``BokehRenderer`` to export the visualization as illustrated above, or you can deploy it as a Bokeh server app. \n\nHere we will create a small interactive plot, using Linked Streams, which mirrors the points selected using box- and lasso-select tools in a second plot and computes some statistics:\n\n\n```python", "start_char_idx": 2, "end_char_idx": 529, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "65418be6-d2c0-45d2-abae-9c63c7f5034c": {"__data__": {"id_": "65418be6-d2c0-45d2-abae-9c63c7f5034c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5e664123-9dd0-48f2-af91-a6c5daf90610", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b5232685560244945c0c4c01b957423f924f225b620bdc2a301ebd36f8cc8749", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a1fb4498-dfe4-4315-883b-46b3b71de77e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e69a655001bfab3d892e8f4a667325edf95f384b1485b0e39cc5cf20c6c85ea4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d10144a7-a310-4f59-afb2-3067d49abbeb", "node_type": "1", "metadata": {}, "hash": "15141954afb15b2331be2f534af2a73b96aba154edcb961c8f41e8b3acb2fcca", "class_name": "RelatedNodeInfo"}}, "hash": "cb787c9eeeb61cb18cc199ca0f993ef6891cae0bf976e507a7a05d6e604f804b", "text": "Declare some points\npoints = hv.Points(np.random.randn(1000,2 ))", "start_char_idx": 2, "end_char_idx": 66, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d10144a7-a310-4f59-afb2-3067d49abbeb": {"__data__": {"id_": "d10144a7-a310-4f59-afb2-3067d49abbeb", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "70b3d11f-00fe-4050-85fc-cec9d32da8ea", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7e88bc4db0b16e7cac7d636cb67308f88be79d48b2eda2b0932d29b8fad391d1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "65418be6-d2c0-45d2-abae-9c63c7f5034c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cb787c9eeeb61cb18cc199ca0f993ef6891cae0bf976e507a7a05d6e604f804b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b0cc5c18-0d90-44d5-9821-ea5ea59911d2", "node_type": "1", "metadata": {}, "hash": "d02909ab78a14628498284018fc67e5b6525a98242a1b589a2718f5ba9e1baab", "class_name": "RelatedNodeInfo"}}, "hash": "15141954afb15b2331be2f534af2a73b96aba154edcb961c8f41e8b3acb2fcca", "text": "Declare points as source of selection stream\nselection = hv.streams.Selection1D(source=points)", "start_char_idx": 2, "end_char_idx": 96, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b0cc5c18-0d90-44d5-9821-ea5ea59911d2": {"__data__": {"id_": "b0cc5c18-0d90-44d5-9821-ea5ea59911d2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "68def7e2-8124-4bf0-8426-c49bc63af5e7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7e0329b9c0d288d4202ca88fd8235db51d9e90d937cdfce71e973589ea683b50", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d10144a7-a310-4f59-afb2-3067d49abbeb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "15141954afb15b2331be2f534af2a73b96aba154edcb961c8f41e8b3acb2fcca", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "21abed0e-186e-4656-98b0-8ff3adacc9fa", "node_type": "1", "metadata": {}, "hash": "703ccf7d013b412eb8b81ad1d3dbf1f74e255bfbd4610bb780fcd5736e94b46f", "class_name": "RelatedNodeInfo"}}, "hash": "d02909ab78a14628498284018fc67e5b6525a98242a1b589a2718f5ba9e1baab", "text": "Write function that uses the selection indices to slice points and compute stats\ndef selected_info(index):\n arr = points.array()[index]\n if index:\n label = 'Mean x, y: %.3f, %.3f' % tuple(arr.mean(axis=0))\n else:\n label = 'No selection'\n return points.clone(arr, label=label).opts(color='red')", "start_char_idx": 2, "end_char_idx": 321, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "21abed0e-186e-4656-98b0-8ff3adacc9fa": {"__data__": {"id_": "21abed0e-186e-4656-98b0-8ff3adacc9fa", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "eb9b478d-379b-48b2-a1be-2cb1d0004acb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "87a2657dcfd30f51f334eaabf7eeaad087994f6fd1db7e31e7b4b63056c6951a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b0cc5c18-0d90-44d5-9821-ea5ea59911d2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d02909ab78a14628498284018fc67e5b6525a98242a1b589a2718f5ba9e1baab", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0f80ea8f-1128-43ff-84c7-793a00bf1fc5", "node_type": "1", "metadata": {}, "hash": "2eaff1c0f8a4a708c71e3c1047a97eefc68d25dcc86e3ca9cbd01b6d1d7edcb5", "class_name": "RelatedNodeInfo"}}, "hash": "703ccf7d013b412eb8b81ad1d3dbf1f74e255bfbd4610bb780fcd5736e94b46f", "text": "Combine points and DynamicMap\nselected_points = hv.DynamicMap(selected_info, streams=[selection])\nlayout = points.opts(tools=['box_select', 'lasso_select']) + selected_points\n\nlayout\n```", "start_char_idx": 2, "end_char_idx": 188, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0f80ea8f-1128-43ff-84c7-793a00bf1fc5": {"__data__": {"id_": "0f80ea8f-1128-43ff-84c7-793a00bf1fc5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f40b78f9-b94e-4774-841d-77479410c0eb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "13001c4a3e7e1cf21f8cb07a659469e7ec6ff4e2122eb19fc5ce327723fd8884", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "21abed0e-186e-4656-98b0-8ff3adacc9fa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "703ccf7d013b412eb8b81ad1d3dbf1f74e255bfbd4610bb780fcd5736e94b46f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6a876c0f-ec47-42bf-b7b4-82239db4fb9e", "node_type": "1", "metadata": {}, "hash": "40d58f93a1e1a247c0c24097ac126c6dedbd559ee7cfde049186b49cc37a1432", "class_name": "RelatedNodeInfo"}}, "hash": "2eaff1c0f8a4a708c71e3c1047a97eefc68d25dcc86e3ca9cbd01b6d1d7edcb5", "text": "Working with the BokehRenderer\n\nWhen working with Bokeh server or wanting to manipulate a backend specific plot object you will have to use a HoloViews ``Renderer`` directly to convert the HoloViews object into the backend specific representation. Therefore we will start by getting a hold of a ``BokehRenderer``:\n\n\n```python\nrenderer = hv.renderer('bokeh')\nprint(renderer)\n```\n\n```python\nBokehRenderer()\n```\n\nAll ``Renderer`` classes in HoloViews are so called ParameterizedFunctions; they provide both classmethods and instance methods to render an object. You can easily create a new ``Renderer`` instance using the ``.instance`` method:\n\n\n```python\nrenderer = renderer.instance(mode='server')\n```\n\nRenderers can also have different modes. In this case we will instantiate the renderer in ``'server'`` mode, which tells the Renderer to render the HoloViews object to a format that can easily be deployed as a server app. Before going into more detail about deploying server apps we will quickly remind ourselves how the renderer turns HoloViews objects into Bokeh models.", "start_char_idx": 2, "end_char_idx": 1076, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6a876c0f-ec47-42bf-b7b4-82239db4fb9e": {"__data__": {"id_": "6a876c0f-ec47-42bf-b7b4-82239db4fb9e", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9e6acf41-80f0-4426-a035-6050fc4efdc9", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "71fb1aa087a3ea5db15be6f0705c2ff912726efc5daa37d450924680930f5d16", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0f80ea8f-1128-43ff-84c7-793a00bf1fc5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2eaff1c0f8a4a708c71e3c1047a97eefc68d25dcc86e3ca9cbd01b6d1d7edcb5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4156d059-1c70-43d5-9afc-ee865ef87133", "node_type": "1", "metadata": {}, "hash": "b7df3ca61068b3af8a571872ed99198a340c23a5b272e4cd236ea646655405f8", "class_name": "RelatedNodeInfo"}}, "hash": "40d58f93a1e1a247c0c24097ac126c6dedbd559ee7cfde049186b49cc37a1432", "text": "Figures\n\nThe BokehRenderer converts the HoloViews object to a HoloViews ``Plot``, which holds the Bokeh models that will be rendered to screen. As a very simple example we can convert a HoloViews ``Image`` to a HoloViews plot:\n\n\n```python\nplot = renderer.get_plot(layout)\nprint(plot)\n```\n\n```\n\n```\n\nUsing the ``state`` attribute on the HoloViews plot we can access the Bokeh ``Column`` model, which we can then work with directly.\n\n\n```python\nplot.state\n```\n\n**Column**(id='1570', ...)\n\nIn the background this is how HoloViews converts any HoloViews object into Bokeh models, which can then be converted to embeddable or standalone HTML and be rendered in the browser. This conversion is usually done in the background using the ``figure_data`` method:\n\n\n```python\nhtml = renderer._figure_data(plot, 'html')\n```", "start_char_idx": 2, "end_char_idx": 813, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4156d059-1c70-43d5-9afc-ee865ef87133": {"__data__": {"id_": "4156d059-1c70-43d5-9afc-ee865ef87133", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3091e2fa-cdca-420f-b1e8-bdb8b7d72eda", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ac80b8e271c26867b730400b608b784fd528f3cda7dc9eb4c366475c97812e09", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6a876c0f-ec47-42bf-b7b4-82239db4fb9e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "40d58f93a1e1a247c0c24097ac126c6dedbd559ee7cfde049186b49cc37a1432", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2ed95525-e3e2-456a-8316-71cc575f28e9", "node_type": "1", "metadata": {}, "hash": "ed2ae998897bbedc387cd9f76e0c4538632540ee21e0a397b4d192f984038478", "class_name": "RelatedNodeInfo"}}, "hash": "b7df3ca61068b3af8a571872ed99198a340c23a5b272e4cd236ea646655405f8", "text": "Bokeh Documents\n\nIn Bokeh the ``Document`` is the basic unit at which Bokeh models (such as plots, layouts and widgets) are held and serialized. The serialized JSON representation is then sent to BokehJS on the client-side browser. When in ``'server'`` mode the BokehRenderer will automatically return a server Document:\n\n\n```python\nrenderer(layout)\n```\n\n```\n(,\n {'file-ext': 'html', 'mime_type': u'text/html'})\n```\n\nWe can also easily use the ``server_doc`` method to get a Bokeh ``Document``, which does not require you to make an instance in 'server' mode.\n\n\n```python\ndoc = renderer.server_doc(layout)\ndoc.title = 'HoloViews App'\n```\n\nIn the background however, HoloViews uses the Panel library to render components to a Bokeh model which can be rendered in the notebook, to a file or on a server:\n\n\n```python\nimport panel as pn\n\nmodel = pn.panel(layout).get_root()\nmodel\n```\n\nFor more information on the interaction between Panel and HoloViews see the the Panel documentation.", "start_char_idx": 2, "end_char_idx": 983, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2ed95525-e3e2-456a-8316-71cc575f28e9": {"__data__": {"id_": "2ed95525-e3e2-456a-8316-71cc575f28e9", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "33d8918f-b5e4-4267-b4e4-8175517a4814", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ed3747d8172b67d41f68525a8b7bea6dd004c4bdf800897a8b51481f2f15c47e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4156d059-1c70-43d5-9afc-ee865ef87133", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b7df3ca61068b3af8a571872ed99198a340c23a5b272e4cd236ea646655405f8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "924efa74-9912-4bf1-a424-e7af30393bc9", "node_type": "1", "metadata": {}, "hash": "264e1d8b0663b8cf75e56b2b67079d3c3472df752f9cc318da28d426dddbb5dc", "class_name": "RelatedNodeInfo"}}, "hash": "ed2ae998897bbedc387cd9f76e0c4538632540ee21e0a397b4d192f984038478", "text": "Deploying with ``panel serve``\n\nDeployment from a script with `panel serve` is one of the most common ways to deploy a Bokeh app. Any ``.py`` or ``.ipynb`` file that attaches a plot to Bokeh's ``curdoc`` can be deployed using ``panel serve``. The easiest way to do this is using wrapping the HoloViews component in Panel using ``pn.panel(hvobj)`` and then calling the ``panel_obj.servable()`` method, which accepts any HoloViews object ensures that the plot is discoverable by Panel and the underlying Bokeh server. See below to see a full standalone script:\n\n```python\nimport numpy as np\nimport panel as pn\nimport holoviews as hv\nimport holoviews.plotting.bokeh\n\npoints = hv.Points(np.random.randn(1000,2 )).opts(tools=['box_select', 'lasso_select'])\nselection = hv.streams.Selection1D(source=points)\n\ndef selected_info(index):\n arr = points.array()[index]\n if index:\n label = 'Mean x, y: %.3f, %.3f' % tuple(arr.mean(axis=0))\n else:\n label = 'No selection'\n return points.clone(arr, label=label).opts(color='red')\n\nlayout = points + hv.DynamicMap(selected_info, streams=[selection])\n\npn.panel(layout).servable(title='HoloViews App')\n```\n\nIn just a few steps we can iteratively refine in the notebook to a deployable Panel app. Note also that we can also deploy an app directly from a notebook. By using `.servable()` in a notebook any regular ``.ipynb`` file can be made into a valid Panel/Bokeh app, which can be served with ``panel serve example.ipynb``.\n\nIt is also possible to create a Bokeh `Document` more directly working with the underlying Bokeh representation instead. This in itself is sufficient to make the plot servable using `bokeh serve`:\n\n\n```python\nhv.renderer('bokeh').server_doc(layout)\n```\n\nIn addition to starting a server from a script we can also start up a server interactively, so let's do a quick deep dive into Bokeh ``Application`` and ``Server`` objects and how we can work with them from within HoloViews.", "start_char_idx": 2, "end_char_idx": 1966, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "924efa74-9912-4bf1-a424-e7af30393bc9": {"__data__": {"id_": "924efa74-9912-4bf1-a424-e7af30393bc9", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d903a57b-ee67-4ff5-a3ea-ca7ea22050bb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "70ff3cec07aa61ce2358f92f99fd74fd49bbf6bc87fd56bb9e3ac0f5f30538e5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2ed95525-e3e2-456a-8316-71cc575f28e9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ed2ae998897bbedc387cd9f76e0c4538632540ee21e0a397b4d192f984038478", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "577c1398-048e-49da-9027-3e3245e15ccf", "node_type": "1", "metadata": {}, "hash": "7132c4f89fd75f4133ee2927e51aed91e13683ffbbdb0bbc83cf1a5cece4ef85", "class_name": "RelatedNodeInfo"}}, "hash": "264e1d8b0663b8cf75e56b2b67079d3c3472df752f9cc318da28d426dddbb5dc", "text": "Bokeh Server\n\nTo start a Bokeh server directly from a notebook we can also use Panel, specifically we'll use the `panel.serve` function. We'll define a ``DynamicMap`` of a sine ``Curve`` varying by frequency, phase and an offset and then create a server instance using Panel:\n\n\n```python\ndef sine(frequency, phase, amplitude):\n xs = np.linspace(0, np.pi*4)\n return hv.Curve((xs, np.sin(frequency*xs+phase)*amplitude)).opts(width=800)\n\nranges = dict(frequency=(1, 5), phase=(-np.pi, np.pi), amplitude=(-2, 2), y=(-2, 2))\ndmap = hv.DynamicMap(sine, kdims=['frequency', 'phase', 'amplitude']).redim.range(**ranges)\n\nserver = pn.serve(dmap, start=False, show=False)\n```\n\n```\n\n```\n\nNext we can define a callback on the IOLoop that will open the server app in a new browser window and actually start the app (and if outside the notebook the IOLoop):\n\n\n```python\nserver.start()\nserver.show('/')", "start_char_idx": 2, "end_char_idx": 895, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "577c1398-048e-49da-9027-3e3245e15ccf": {"__data__": {"id_": "577c1398-048e-49da-9027-3e3245e15ccf", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4e3553bb-af59-4673-a6b8-5cc60094e499", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b1dd63eeb0b24bc553e9a6253bfa67f5bd8ee09cfe6c94b0ee7c4aed79961a8e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "924efa74-9912-4bf1-a424-e7af30393bc9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "264e1d8b0663b8cf75e56b2b67079d3c3472df752f9cc318da28d426dddbb5dc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "201021c9-f8ff-440d-bdd8-2003f3765eaa", "node_type": "1", "metadata": {}, "hash": "dd55ef6aa785f358a6b295099b7523f896a9ada78f6a9ec10c6ad21375342c73", "class_name": "RelatedNodeInfo"}}, "hash": "7132c4f89fd75f4133ee2927e51aed91e13683ffbbdb0bbc83cf1a5cece4ef85", "text": "Outside the notebook ioloop needs to be started\n```\n\nAfter running the cell above you should have noticed a new browser window popping up displaying our plot. Once you are done playing with it you can stop it with:\n\n\n```python\nserver.stop()\n```\n\nWe can achieve the equivalent using the `.show` method on a Panel object:\n\n\n```python\nserver = pn.panel(dmap).show()\n```\n\n\n\nWe will once again stop this Server before continuing:\n\n\n```python\nserver.stop()\n```", "start_char_idx": 2, "end_char_idx": 456, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "201021c9-f8ff-440d-bdd8-2003f3765eaa": {"__data__": {"id_": "201021c9-f8ff-440d-bdd8-2003f3765eaa", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "45b0cfb4-07b8-4921-8293-f89216802a9e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8b60bfa57e565f55080040170d3ec823b8de3a15cabceb5db804ca8ff7f01827", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "577c1398-048e-49da-9027-3e3245e15ccf", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7132c4f89fd75f4133ee2927e51aed91e13683ffbbdb0bbc83cf1a5cece4ef85", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "26fbf0dc-91ba-485b-9589-edf3afa518c0", "node_type": "1", "metadata": {}, "hash": "a31f6eab10eacb9aafcff577f5788dca0859fbe8736b847ae34e0a6fe4e66ca2", "class_name": "RelatedNodeInfo"}}, "hash": "dd55ef6aa785f358a6b295099b7523f896a9ada78f6a9ec10c6ad21375342c73", "text": "Inlining apps in the notebook\n\nInstead of displaying our app in a new browser window we can also display an app inline in the notebook simply by using the `.app` method on Panel object. The server app will be killed whenever you rerun or delete the cell that contains the output. Additionally, if your Jupyter Notebook server is not running on the default address or port (``localhost:8888``) supply the websocket origin, which should match the first part of the URL of your notebook:\n\n\n```python\ndmap\n```", "start_char_idx": 2, "end_char_idx": 507, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "26fbf0dc-91ba-485b-9589-edf3afa518c0": {"__data__": {"id_": "26fbf0dc-91ba-485b-9589-edf3afa518c0", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1c89d447-dd35-4074-b784-c20a07678a10", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7d7c055642a5760de705674f5bd1bb1b85f8710d557ee0e36d62ed6be0214f1b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "201021c9-f8ff-440d-bdd8-2003f3765eaa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dd55ef6aa785f358a6b295099b7523f896a9ada78f6a9ec10c6ad21375342c73", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c88d8623-4857-4de6-9ccf-826395df9d2a", "node_type": "1", "metadata": {}, "hash": "56cae660108d75cf2c738eea9db418bb8c054933b1dc92ca4f086369be07a90d", "class_name": "RelatedNodeInfo"}}, "hash": "a31f6eab10eacb9aafcff577f5788dca0859fbe8736b847ae34e0a6fe4e66ca2", "text": "Periodic callbacks\n\nOne of the most important features of deploying apps is the ability to attach asynchronous, periodic callbacks, which update the plot. The simplest way of achieving this is to attach a ``Counter`` stream on the plot which is incremented on each callback. As a simple demo we'll simply compute a phase offset from the counter value, animating the sine wave:\n\n\n```python\ndef sine(counter):\n phase = counter*0.1%np.pi*2\n xs = np.linspace(0, np.pi*4)\n return hv.Curve((xs, np.sin(xs+phase))).opts(width=800)\n\ncounter = hv.streams.Counter()\nhv.DynamicMap(sine, streams=[counter])\n\ndmap\n```\n\n\n\nOnce we have created a Panel object we can call the `add_periodic_callback` method to set up a periodic callback. The first argument to the method is the callback and the second argument period specified in milliseconds. As soon as we start this callback you should see the Curve above become animated.\n\n\n```python\ndef update():\n counter.event(counter=counter.counter+1)\n\ncb = pn.state.add_periodic_callback(update, period=200)\n```\n\nOnce started we can stop and start it at will using the `.stop` and `.start` methods:\n\n\n```python\ncb.stop()\n```", "start_char_idx": 2, "end_char_idx": 1166, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c88d8623-4857-4de6-9ccf-826395df9d2a": {"__data__": {"id_": "c88d8623-4857-4de6-9ccf-826395df9d2a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ec29f24e-5c62-4dfc-8755-bfa9d3ba886e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e965a863002100c49408a19245688f94cbb54f26f97aaa4e684544fed67d49a1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "26fbf0dc-91ba-485b-9589-edf3afa518c0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a31f6eab10eacb9aafcff577f5788dca0859fbe8736b847ae34e0a6fe4e66ca2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cf13fc4b-da75-40b3-ae52-18048a1e11f7", "node_type": "1", "metadata": {}, "hash": "bc05f75661fdbd702d13a4cbe9f5ecf40d8c968b3e366211e303c0b08de0fea4", "class_name": "RelatedNodeInfo"}}, "hash": "56cae660108d75cf2c738eea9db418bb8c054933b1dc92ca4f086369be07a90d", "text": "Combining Bokeh Application and Flask Application\n\nWhile Panel and Bokeh are great ways to create an application often we want to leverage the simplicity of a Flask server. With Flask we can easily embed a HoloViews, Bokeh and Panel application in a regular website. The main idea for getting Bokeh and Flask to work together is to run both apps on ports and then use Flask to pull the Bokeh Serve session with `pull_session` from bokeh.client.session. \n\n\n```python\ndef sine(frequency, phase, amplitude):\n xs = np.linspace(0, np.pi*4)\n return hv.Curve((xs, np.sin(frequency*xs+phase)*amplitude)).options(width=800)\n\nranges = dict(frequency=(1, 5), phase=(-np.pi, np.pi), amplitude=(-2, 2), y=(-2, 2))\ndmap = hv.DynamicMap(sine, kdims=['frequency', 'phase', 'amplitude']).redim.range(**ranges)\n\npn.serve(dmap, websocket_origin='localhost:5000', port=5006, show=False)\n```\n\nWe run load up our dynamic map into a Bokeh Application with the parameter `allow_websocket_origin=[\"localhost:5000\"]`\n\n```python\nfrom bokeh.client import pull_session\nfrom bokeh.embed import server_session\nfrom flask import Flask, render_template\nfrom flask import send_from_directory\n\napp = Flask(__name__)", "start_char_idx": 2, "end_char_idx": 1188, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cf13fc4b-da75-40b3-ae52-18048a1e11f7": {"__data__": {"id_": "cf13fc4b-da75-40b3-ae52-18048a1e11f7", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "442f52e4-6725-41bd-822a-ebda60722cd4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "73cbc64f49251158b3697eecf002e96c51968b40f9b3b453bd03c40b51a69975", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c88d8623-4857-4de6-9ccf-826395df9d2a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "56cae660108d75cf2c738eea9db418bb8c054933b1dc92ca4f086369be07a90d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "69e02dcb-137f-4d0c-8fc0-4ea885956f50", "node_type": "1", "metadata": {}, "hash": "229230556bf5eeab31d8c465a8b624c4dccd512e821fb9aa60f6a6e8a3477ab4", "class_name": "RelatedNodeInfo"}}, "hash": "bc05f75661fdbd702d13a4cbe9f5ecf40d8c968b3e366211e303c0b08de0fea4", "text": "locally creates a page\n@app.route('/')\ndef index():\n with pull_session(url=\"http://localhost:5006/\") as session:\n # generate a script to load the customized session\n script = server_session(session_id=session.id, url='http://localhost:5006')\n # use the script in the rendered page\n return render_template(\"embed.html\", script=script, template=\"Flask\")\n\nif __name__ == '__main__':\n # runs app in debug mode\n app.run(port=5000, debug=True)\n```\n\nNote that in a notebook context we cannot use `pull_session` but this example demonstrates how we can embed the Bokeh server inside a simple flask app.\n\nThis is an example of a basic flask app. To find out more about Flask a tutorial can be found on the Flask Quickstart Guide. \n\n\n\nBelow is an example of a basic Flask App that pulls from the Bokeh Application. The Bokeh Application is using `Server` from Bokeh and `IOLoop` from tornado to run the app. \n\n```python", "start_char_idx": 2, "end_char_idx": 944, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "69e02dcb-137f-4d0c-8fc0-4ea885956f50": {"__data__": {"id_": "69e02dcb-137f-4d0c-8fc0-4ea885956f50", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d5cb8778-a09c-4a43-ba05-588042fbe0a3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "50051372e63d7c19ed77d28810e9fe43b3b4f64a7f498281576cc7651c0b1c50", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cf13fc4b-da75-40b3-ae52-18048a1e11f7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bc05f75661fdbd702d13a4cbe9f5ecf40d8c968b3e366211e303c0b08de0fea4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e8015ebd-465f-4496-aef6-5580aeecf4cf", "node_type": "1", "metadata": {}, "hash": "7e92569bff7a81c260bc924fdc571cae526715c5349117b8c8aece32b49ac377", "class_name": "RelatedNodeInfo"}}, "hash": "229230556bf5eeab31d8c465a8b624c4dccd512e821fb9aa60f6a6e8a3477ab4", "text": "holoviews.py\n\nimport holoviews as hv\nimport panel as pn\nimport numpy as np\n\nhv.extension('bokeh')\n\ndef sine(frequency, phase, amplitude):\n xs = np.linspace(0, np.pi*4)\n return hv.Curve((xs, np.sin(frequency*xs+phase)*amplitude)).options(width=800)\n\nif __name__ == '__main__':\n ranges = dict(frequency=(1, 5), phase=(-np.pi, np.pi), amplitude=(-2, 2), y=(-2, 2))\n dmap = hv.DynamicMap(sine, kdims=['frequency', 'phase', 'amplitude']).redim.range(**ranges)\n pn.serve(dmap, port=5006, allow_websocket_origin=[\"localhost:5000\"], show=False)\n```\n\n```python\n#flaskApp.py\n\nfrom bokeh.client import pull_session\nfrom bokeh.embed import server_session\nfrom flask import Flask, render_template\nfrom flask import send_from_directory\n\napp = Flask(__name__)", "start_char_idx": 2, "end_char_idx": 761, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e8015ebd-465f-4496-aef6-5580aeecf4cf": {"__data__": {"id_": "e8015ebd-465f-4496-aef6-5580aeecf4cf", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e9a712eb-6ee9-49d0-8626-92545a16df90", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bc3490d522dcca698ad1d9ca50a1a8ee6a5f570e41a4127d742f99fc90720c19", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "69e02dcb-137f-4d0c-8fc0-4ea885956f50", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "229230556bf5eeab31d8c465a8b624c4dccd512e821fb9aa60f6a6e8a3477ab4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "80edff1c-28f5-4414-b5b7-a4507e06838b", "node_type": "1", "metadata": {}, "hash": "0fa5644d47a7eb19dff49df25a22d856a9945e0c7b0d9da301117ea5c7d4d4f2", "class_name": "RelatedNodeInfo"}}, "hash": "7e92569bff7a81c260bc924fdc571cae526715c5349117b8c8aece32b49ac377", "text": "locally creates a page\n@app.route('/')\ndef index():\n with pull_session(url=\"http://localhost:5006/\") as session:\n # generate a script to load the customized session\n script = server_session(session_id=session.id, url='http://localhost:5006')\n # use the script in the rendered page\n return render_template(\"embed.html\", script=script, template=\"Flask\")\n\n\nif __name__ == '__main__':\n # runs app in debug mode\n app.run(port=5000, debug=True)\n```\n\n```html\n\n\n\n\n\n\n \n Embedding a Bokeh Server With Flask\n\n\n\n \n This Bokeh app below served by a Bokeh server that has been embedded\n in another web app framework. For more information see the section\n Embedding Bokeh Server as a Library\n in the User's Guide.\n \n {{ script|safe }}\n\n\n```\n\nIf you wish to replicate navigate to the `examples/gallery/apps/flask` directory and follow the these steps:\n\n* Step One: call `python holoviews_app.py` in the terminal (this will start the Panel/Bokeh server)\n* Step Two: open a new terminal and call `python flask_app.py` (this will start the Flask application)\n* Step Three: go to web browser and type `localhost:5000` and the app will appear", "start_char_idx": 2, "end_char_idx": 1185, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "80edff1c-28f5-4414-b5b7-a4507e06838b": {"__data__": {"id_": "80edff1c-28f5-4414-b5b7-a4507e06838b", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "516cec03-856f-4324-92db-05dfe7624163", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2cda76a3dac65a693fa3ee689f75f401b6a7e0dc2e9ca973df4bcea116c03b24", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e8015ebd-465f-4496-aef6-5580aeecf4cf", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7e92569bff7a81c260bc924fdc571cae526715c5349117b8c8aece32b49ac377", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7c130334-5d53-4b12-a938-d967726c3966", "node_type": "1", "metadata": {}, "hash": "15bfb245fafcec8fc46c8aec84b0776b3074ae6d0073560a11f77859acb995c7", "class_name": "RelatedNodeInfo"}}, "hash": "0fa5644d47a7eb19dff49df25a22d856a9945e0c7b0d9da301117ea5c7d4d4f2", "text": "Combining HoloViews and Panel or Bokeh Plots/Widgets\n\nWhile HoloViews provides very convenient ways of creating an app it is not as fully featured as Bokeh itself is. Therefore we often want to extend a HoloViews based app with Panel or Bokeh plots and widgets. Here we will discover to achieve this with both Panel and then the equivalent using pure Bokeh.\n\n\n```python\nimport holoviews as hv\nimport numpy as np\nimport panel as pn", "start_char_idx": 2, "end_char_idx": 432, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7c130334-5d53-4b12-a938-d967726c3966": {"__data__": {"id_": "7c130334-5d53-4b12-a938-d967726c3966", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e8c377f3-8948-4388-99a3-d02ffdd4edc8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "423910b1b7f1262cc7a49d86b2648f43abcbba2a8201710d3267a90fa6fb192a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "80edff1c-28f5-4414-b5b7-a4507e06838b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0fa5644d47a7eb19dff49df25a22d856a9945e0c7b0d9da301117ea5c7d4d4f2", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0688bd15-2836-45df-a186-1c01e81d858d", "node_type": "1", "metadata": {}, "hash": "514336945430557d10b520cd169b5a19e8e863dad8d7857cb8f8a175beb94a71", "class_name": "RelatedNodeInfo"}}, "hash": "15bfb245fafcec8fc46c8aec84b0776b3074ae6d0073560a11f77859acb995c7", "text": "Create the holoviews app again\ndef sine(phase):\n xs = np.linspace(0, np.pi*4)\n return hv.Curve((xs, np.sin(xs+phase))).opts(width=800)\n\nstream = hv.streams.Stream.define('Phase', phase=0.)()\ndmap = hv.DynamicMap(sine, streams=[stream])\n\nstart, end = 0, np.pi*2\nslider = pn.widgets.FloatSlider(start=start, end=end, value=start, step=0.2, name=\"Phase\")", "start_char_idx": 2, "end_char_idx": 359, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0688bd15-2836-45df-a186-1c01e81d858d": {"__data__": {"id_": "0688bd15-2836-45df-a186-1c01e81d858d", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4ed55078-1df2-4b03-8507-3cf2d919d7f6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0a0993ab53aff258ac8179dff486b35eecfbac9a6e6a157cd2d3694db5e8f935", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7c130334-5d53-4b12-a938-d967726c3966", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "15bfb245fafcec8fc46c8aec84b0776b3074ae6d0073560a11f77859acb995c7", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b420acec-31a2-450d-8902-6f09708c48dd", "node_type": "1", "metadata": {}, "hash": "c35607a25d98b2feb87b3241415672647e8f343415653a03a99be44246f52b99", "class_name": "RelatedNodeInfo"}}, "hash": "514336945430557d10b520cd169b5a19e8e863dad8d7857cb8f8a175beb94a71", "text": "Create a slider and play buttons\ndef animate_update():\n year = slider.value + 0.2\n if year > end:\n year = start\n slider.value = year\n\ndef slider_update(event):\n # Notify the HoloViews stream of the slider update \n stream.event(phase=event.new)\n\nslider.param.watch(slider_update, 'value')\n\ndef animate(event):\n if button.name == '\u25ba Play':\n button.name = '\u275a\u275a Pause'\n callback.start()\n else:\n button.name = '\u25ba Play'\n callback.stop()\n\nbutton = pn.widgets.Button(name='\u25ba Play', width=60, align='end')\nbutton.on_click(animate)\ncallback = pn.state.add_periodic_callback(animate_update, 50, start=False)\n\napp = pn.Column(\n dmap,\n pn.Row(slider, button)\n)\n\napp\n```\n\nIf instead we want to deploy this we could add `.servable` as discussed before or use `pn.serve`. Note however that when using `pn.serve` all sessions will share the same state therefore it is best to \nwrap the creation of the app in a function which we can then provide to `pn.serve`. For more detail on deploying Panel applications also see the Panel server deployment guide.\n\nNow we can reimplement the same example using Bokeh allowing us to compare and contrast the approaches:\n\n\n```python\nimport numpy as np\nimport holoviews as hv\n\nfrom bokeh.io import show, curdoc\nfrom bokeh.layouts import layout\nfrom bokeh.models import Slider, Button\n\nrenderer = hv.renderer('bokeh').instance(mode='server')", "start_char_idx": 2, "end_char_idx": 1422, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b420acec-31a2-450d-8902-6f09708c48dd": {"__data__": {"id_": "b420acec-31a2-450d-8902-6f09708c48dd", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "02683cdf-83f2-4d90-820c-7e5afe0e45da", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b0b3368aaf5dfd850309366069e9431673d405d053a2c86ac29cc5d520f4255c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0688bd15-2836-45df-a186-1c01e81d858d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "514336945430557d10b520cd169b5a19e8e863dad8d7857cb8f8a175beb94a71", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "52f4fdd0-066d-42ad-94f2-dc4a55076af8", "node_type": "1", "metadata": {}, "hash": "499eebb2a6504d83e958606fed1d3673e1c1d9a7262cee22309e7f81b81e0e4f", "class_name": "RelatedNodeInfo"}}, "hash": "c35607a25d98b2feb87b3241415672647e8f343415653a03a99be44246f52b99", "text": "Create the holoviews app again\ndef sine(phase):\n xs = np.linspace(0, np.pi*4)\n return hv.Curve((xs, np.sin(xs+phase))).opts(width=800)\n\nstream = hv.streams.Stream.define('Phase', phase=0.)()\ndmap = hv.DynamicMap(sine, streams=[stream])", "start_char_idx": 2, "end_char_idx": 243, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "52f4fdd0-066d-42ad-94f2-dc4a55076af8": {"__data__": {"id_": "52f4fdd0-066d-42ad-94f2-dc4a55076af8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "911c4817-72fb-47d5-85f9-52976b3af99b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3905b57d8255f45f11ff58989ea2ec7f547c282a3e75ba5f6d0de56cf9179290", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b420acec-31a2-450d-8902-6f09708c48dd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c35607a25d98b2feb87b3241415672647e8f343415653a03a99be44246f52b99", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "dd5c6664-7b57-414a-8c59-80b9b3c3b5e9", "node_type": "1", "metadata": {}, "hash": "819b69dbea14d8c8b61fd257d97410b57040b004ed064a6db89ea58818ff7268", "class_name": "RelatedNodeInfo"}}, "hash": "499eebb2a6504d83e958606fed1d3673e1c1d9a7262cee22309e7f81b81e0e4f", "text": "Define valid function for FunctionHandler\ndef modify_doc(doc):\n # Create HoloViews plot and attach the document\n hvplot = renderer.get_plot(dmap, doc)\n\n # Create a slider and play buttons\n def animate_update():\n year = slider.value + 0.2\n if year > end:\n year = start\n slider.value = year\n\n def slider_update(attrname, old, new):\n # Notify the HoloViews stream of the slider update \n stream.event(phase=new)\n \n start, end = 0, np.pi*2\n slider = Slider(start=start, end=end, value=start, step=0.2, title=\"Phase\")\n slider.on_change('value', slider_update)\n \n callback_id = None\n\n def animate():\n global callback_id\n if button.label == '\u25ba Play':\n button.label = '\u275a\u275a Pause'\n callback_id = doc.add_periodic_callback(animate_update, 50)\n else:\n button.label = '\u25ba Play'\n doc.remove_periodic_callback(callback_id)\n button = Button(label='\u25ba Play', width=60)\n button.on_click(animate)\n \n # Combine the holoviews plot and widgets in a layout\n plot = layout([\n [hvplot.state],\n [slider, button]], sizing_mode='fixed')\n \n doc.add_root(plot)\n return doc", "start_char_idx": 2, "end_char_idx": 1222, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "dd5c6664-7b57-414a-8c59-80b9b3c3b5e9": {"__data__": {"id_": "dd5c6664-7b57-414a-8c59-80b9b3c3b5e9", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d157a39d-bfe2-42cd-b03e-94eb3da17585", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f80f98d7770318edd948882270eab329d88d4024d0b08bd2adbb8aadb2847445", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "52f4fdd0-066d-42ad-94f2-dc4a55076af8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "499eebb2a6504d83e958606fed1d3673e1c1d9a7262cee22309e7f81b81e0e4f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7fb1a34e-f7b9-4d69-a5dd-eaa6cd467222", "node_type": "1", "metadata": {}, "hash": "f7a094b9a4deb1a2acf363047db1a1aa84d6d5475c6a28c6dd407decab0fd8c6", "class_name": "RelatedNodeInfo"}}, "hash": "819b69dbea14d8c8b61fd257d97410b57040b004ed064a6db89ea58818ff7268", "text": "To display in the notebook\nshow(modify_doc, notebook_url='localhost:8888')", "start_char_idx": 2, "end_char_idx": 76, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7fb1a34e-f7b9-4d69-a5dd-eaa6cd467222": {"__data__": {"id_": "7fb1a34e-f7b9-4d69-a5dd-eaa6cd467222", "embedding": null, "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "2a5c9090-68f7-429c-a843-e03b123a694a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d8f563fc9d2f176824df3ca206195df64a85cbaf6e808c1afe7d6871dce8dfbc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "dd5c6664-7b57-414a-8c59-80b9b3c3b5e9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "819b69dbea14d8c8b61fd257d97410b57040b004ed064a6db89ea58818ff7268", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7e88ef78-c8ff-427a-b3c7-41420978148d", "node_type": "1", "metadata": {}, "hash": "44225fe48b77b67c8e6bbfa30f65a712b28218fdd0c13c3aa0717e6ef9dfe026", "class_name": "RelatedNodeInfo"}}, "hash": "f7a094b9a4deb1a2acf363047db1a1aa84d6d5475c6a28c6dd407decab0fd8c6", "text": "To display in a script\n```\n\n\n\nAs you can see depending on your needs you have complete freedom whether to use just HoloViews and deploy your application, combine it Panel or even with pure Bokeh.", "start_char_idx": 2, "end_char_idx": 197, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7e88ef78-c8ff-427a-b3c7-41420978148d": {"__data__": {"id_": "7e88ef78-c8ff-427a-b3c7-41420978148d", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "c77c752e-ecda-4b56-a703-e0a9b26b9610", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5e4dc35a43bbcaca10dad453efb667cac6704ab2b848fe7ee9f8d40adb4dc783", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7fb1a34e-f7b9-4d69-a5dd-eaa6cd467222", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f7a094b9a4deb1a2acf363047db1a1aa84d6d5475c6a28c6dd407decab0fd8c6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d74d0661-8e21-4ee3-915c-f974bcc0b816", "node_type": "1", "metadata": {}, "hash": "adb5fc0be390c0fd4c79f4eeff81738fa275b8ab9ecd541a6a7e0b9d5a7ac922", "class_name": "RelatedNodeInfo"}}, "hash": "44225fe48b77b67c8e6bbfa30f65a712b28218fdd0c13c3aa0717e6ef9dfe026", "text": "Exporting and Archiving\n\nMost of the other user guides show you how to use HoloViews for interactive, exploratory visualization of your data, while the Applying Customizations user guide shows how to use HoloViews completely non-interactively, generating and rendering images directly to disk using `hv.save`. In this notebook, we show how HoloViews works together with the Jupyter Notebook to establish a fully interactive yet *also* fully reproducible scientific or engineering workflow for generating reports or publications. That is, as you interactively explore your data and build visualizations in the notebook, you can automatically generate and export them as figures that will feed directly into your papers or web pages, along with records of how those figures were generated and even storing the actual data involved so that it can be re-analyzed later. \n\n\n\n\n```python\nimport holoviews as hv\nfrom holoviews import opts\nfrom holoviews.operation import contours\nhv.extension('matplotlib')\n```", "start_char_idx": 2, "end_char_idx": 1006, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d74d0661-8e21-4ee3-915c-f974bcc0b816": {"__data__": {"id_": "d74d0661-8e21-4ee3-915c-f974bcc0b816", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1c581b1b-e52c-4e23-a083-eef141191e06", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "eeab3685a801c18ff964f90700acb404275072c0ad9cedd0a8d6a4107f5751d8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7e88ef78-c8ff-427a-b3c7-41420978148d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "44225fe48b77b67c8e6bbfa30f65a712b28218fdd0c13c3aa0717e6ef9dfe026", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b4dfdbba-d41f-49b8-a51a-02afd9440228", "node_type": "1", "metadata": {}, "hash": "eb3a1c3babf0a0a0e8a0f57853cd2743a4d2793a894c559a4b3b7e260668cc38", "class_name": "RelatedNodeInfo"}}, "hash": "adb5fc0be390c0fd4c79f4eeff81738fa275b8ab9ecd541a6a7e0b9d5a7ac922", "text": "Exporting specific files\n\nDuring interactive exploration in the Jupyter Notebook, your results are always visible within the notebook itself, but you can explicitly request that any visualization is also exported to an external file on disk:\n\n\n```python\npenguins = hv.RGB.load_image('../assets/penguins.png')\nhv.save(penguins, 'penguin_plot.png', fmt='png')\npenguins\n```\n\nThis mechanism can be used to provide a clear link between the steps for generating the figure, and the file on disk. You can now load the exported PNG image back into HoloViews, if you like, using ``hv.RGB.load_image`` although the result would be a bit confusing due to the nested axes.\n\nThe ``fig=\"png\"`` part of the ``hv.save`` function call above specified that the file should be saved in PNG format, which is useful for posting on web pages or editing in raster-based graphics programs. Note that `hv.save` also accepts `HoloMap`s which can be saved to formats such as ``'scrubber'``, ``'widgets'`` or even ``'gif'`` or ``'mp4'`` (if the necessary matplotlib dependencies are available). \n\nIf the file extension is part of the filename, that will automatically be used to set the format. Conversely, if the format is explicitly specified, then the extension does not have to be part of the filename (and any filename extension that is provided will be ignored). Sometimes the two pieces of information are independent: for instance, a filename ending in `.html` can support either the `'widgets'` or `'scrubber'` formats.\n\nFor a publication, you will usually want to select SVG format because this vector format preserves the full resolution of all text and drawing elements. SVG files can be be used in some document preparation programs directly (e.g. LibreOffice), and can easily be converted and manipulated in vector graphics editors such as Inkscape.", "start_char_idx": 2, "end_char_idx": 1839, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b4dfdbba-d41f-49b8-a51a-02afd9440228": {"__data__": {"id_": "b4dfdbba-d41f-49b8-a51a-02afd9440228", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "30852d49-caf9-4ac3-aeea-c3b26137b885", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9cd09d9d06e2872c60e71474990b6ddf38211ddbbc89f850265a686aeabc7020", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d74d0661-8e21-4ee3-915c-f974bcc0b816", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "adb5fc0be390c0fd4c79f4eeff81738fa275b8ab9ecd541a6a7e0b9d5a7ac922", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "74ee1e11-b6b1-4b5a-8239-17499626bc00", "node_type": "1", "metadata": {}, "hash": "611a5a3b76ae419761d1da1777b9fa03ded14f909e0861b3d101cbd59c204ef4", "class_name": "RelatedNodeInfo"}}, "hash": "eb3a1c3babf0a0a0e8a0f57853cd2743a4d2793a894c559a4b3b7e260668cc38", "text": "Exporting notebooks\n\nThe ``hv.save`` function is useful when you want specific plots saved into specific files. Often, however, a notebook will contain an entire suite of results contained in multiple different cells, and manually specifying these cells and their filenames is error-prone, with a high likelihood of accidentally creating multiple files with the same name or using different names in different notebooks for the same objects.\n\nTo make the exporting process easier for large numbers of outputs, as well as more predictable, HoloViews also offers a powerful automatic notebook exporting facility, creating an archive of all your results. Automatic export is very useful in the common case of having a notebook that contains a series of figures to be used in a report or publication, particularly if you are repeatedly re-running the notebook as you finalize your results, and want the full set of current outputs to be available to an external document preparation system.\n\nThe advantage of using this archival system over simply converting the notebook to a static HTML file with nbconvert is that you can generate a collection of individual file assets in one or more desired file formats.\n\nTo turn on automatic adding of your files to the export archive, run ``hv.archive.auto()``:\n\n\n```python\nhv.archive.auto()\n```\n\nThis object's behavior can be customized extensively; try pressing tab within the parentheses for a list of options, which are described more fully below.\n\nBy default, the output will go into a directory with the same name as your notebook, and the names for each object will be generated from the groups and labels used by HoloViews. Objects that contain HoloMaps are not exported by default, since those are usually rendered as animations that are not suitable for inclusion in publications, but you can change it to ``.auto(holomap='gif')`` if you want those as well.", "start_char_idx": 2, "end_char_idx": 1909, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "74ee1e11-b6b1-4b5a-8239-17499626bc00": {"__data__": {"id_": "74ee1e11-b6b1-4b5a-8239-17499626bc00", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a9b36b88-f1ef-42ec-95c2-73605b824ca3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8a0c8afb090c431641153fa98bd6d2dde9b43d299299b76c014075284ef0a98e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b4dfdbba-d41f-49b8-a51a-02afd9440228", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "eb3a1c3babf0a0a0e8a0f57853cd2743a4d2793a894c559a4b3b7e260668cc38", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5abad214-b107-47b9-b86d-97193765f4a5", "node_type": "1", "metadata": {}, "hash": "ad934970f6213b79a51d4f2d531fa3ff9f2d69309aa4a39ea627e7d24491b607", "class_name": "RelatedNodeInfo"}}, "hash": "611a5a3b76ae419761d1da1777b9fa03ded14f909e0861b3d101cbd59c204ef4", "text": "Adding files to an archive\n\nTo see how the auto-exporting works, let's define a few HoloViews objects:\n\n\n```python\npenguins[:,:,'R'].relabel(\"Red\") + penguins[:,:,'G'].relabel(\"Green\") + penguins[:,:,'B'].relabel(\"Blue\")\n```\n\n\n```python\npenguins * hv.Arrow(0.15, 0.3, 'Penguin', '>')\n```\n\n\n```python\ncs = contours(penguins[:,:,'R'], levels=[0.10,0.80])\noverlay = penguins[:, :, 'R'] * cs\noverlay.opts(\n opts.Contours(linewidth=1.3, cmap='Autumn'),\n opts.Image(cmap=\"gray\"))\n```\n\nWe can now list what has been captured, along with the names that have been generated:\n\n\n```python\nhv.archive.contents()\n```\n\nHere each object has resulted in two files, one in SVG format and one in Python \"pickle\" format (which appears as a ``zip`` file with extension ``.hvz`` in the listing). We'll ignore the pickle files for now, focusing on the SVG images.\n\nThe name generation code for these files is heavily customizable, but by default it consists of a list of dimension values and objects:\n\n ``{dimension},{dimension},...{group}-{label},{group}-{label},...``. \n\nThe ``{dimension}`` shows what dimension values are included anywhere in this object, if it contains any high-level ``Dimensioned`` objects like ``HoloMap``, ``NdOverlay``, and ``GridSpace``. Of course, nearly all HoloViews objects have dimensions, such as ``x`` and ``y`` in this case, but those dimensions are not used in the filenames because they are explicitly shown in the plots; only the top-level dimensions are used (those that determine which plot this is, not those that are shown in the plot itself.)\n\nThe ``{group}-{label}`` information lists the names HoloViews uses for default titles and for attribute access for the various objects that make up a given displayed object. E.g. the first SVG image in the list is a ``Layout`` of the three given ``Image`` objects, and the second one is an ``Overlay`` of an ``RGB`` object and an ``Arrow`` object. This information usually helps distinguish one plot from another, because they will typically be plots of objects that have different labels. \n\nIf the generated names are not unique, a numerical suffix will be added to make them unique. A maximum filename length is enforced, which can be set with ``hv.archive.max_filename=``_num_.\n\nIf you prefer a fixed-width filename, you can use a hash for each name instead (or in addition), where ``:.8`` specifies how many characters to keep from the hash:\n\n\n```python\nhv.archive.filename_formatter=\"{SHA:.8}\"\ncs\n```\n\n\n```python\nhv.archive.contents()\n```\n\nYou can see that the newest files added have the shorter, fixed-width format, though the names are no longer meaningful. If the ``filename_formatter`` had been set from the start, all filenames would have been of this type, which has both practical advantages (short names, all the same length) and disadvantages (no semantic clue about the contents).", "start_char_idx": 2, "end_char_idx": 2878, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5abad214-b107-47b9-b86d-97193765f4a5": {"__data__": {"id_": "5abad214-b107-47b9-b86d-97193765f4a5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "649e3f70-4fb3-4a86-9d1d-050a2b9e3539", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8c6845ec683d82986f449d74c1c9940b526e160d15ff41adbae6dce64182644b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "74ee1e11-b6b1-4b5a-8239-17499626bc00", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "611a5a3b76ae419761d1da1777b9fa03ded14f909e0861b3d101cbd59c204ef4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e27d941c-1b61-4e04-b0e9-a5beb00e2d1f", "node_type": "1", "metadata": {}, "hash": "42787163df853e4baab4819e946dcd6fa8852db169256d47cea74c3b283332bf", "class_name": "RelatedNodeInfo"}}, "hash": "ad934970f6213b79a51d4f2d531fa3ff9f2d69309aa4a39ea627e7d24491b607", "text": "Generated indexes\n\nIn addition to the files that were added to the archive for each of the cell outputs above, the archive exporter will also add an ``index.html`` file with a static copy of the notebook, with each cell labelled with the filename used to save it once `hv.archive.export()` is called (you can verify this for yourself after this call is executed below). This HTML file acts as a definitive index to your results, showing how they were generated and where they were exported on disk. \n\nThe exporter will also add a cleared, runnable copy of the notebook ``index.ipynb`` (with output deleted), so that you can later regenerate all of the output, with changes if necessary. \n\nThe exported archive will thus be a complete set of your results, along with a record of how they were generated, plus a recipe for regenerating them -- i.e., fully reproducible research! This HTML file and .ipynb file can the be submitted as supplemental materials for a paper, allowing any reader to build on your results, or it can just be kept privately so that future collaborators can start where this research left off.", "start_char_idx": 2, "end_char_idx": 1122, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e27d941c-1b61-4e04-b0e9-a5beb00e2d1f": {"__data__": {"id_": "e27d941c-1b61-4e04-b0e9-a5beb00e2d1f", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "38e4aff7-eb47-4788-8cc0-6fa17bdbb7f8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d8d79a4c5e71ce2e6a37f5ab72275e44163b84b2a1ba085afd95a9f038f28ab4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5abad214-b107-47b9-b86d-97193765f4a5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ad934970f6213b79a51d4f2d531fa3ff9f2d69309aa4a39ea627e7d24491b607", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "61deba78-0591-4cfd-aeeb-e3fbd4c4a6f7", "node_type": "1", "metadata": {}, "hash": "35e18a92cc0aba2376cf3f242399aa4f2070ded611e0e69d1b18bcd18a96ac06", "class_name": "RelatedNodeInfo"}}, "hash": "42787163df853e4baab4819e946dcd6fa8852db169256d47cea74c3b283332bf", "text": "Adding your own data to the archive\n\nOf course, your results may depend on a lot of external packages, libraries, code files, and so on, which will not automatically be included or listed in the exported archive.\n\nLuckily, the archive support is very general, and you can add any object to it that you want to be exported along with your output. For instance, you can store arbitrary metadata of your choosing, such as version control information, here as a JSON-format text file: \n\n\n```python\nimport json\nhv.archive.add(filename='metadata.json', \n data=json.dumps({'repository':'git@github.com:holoviz/holoviews.git',\n 'commit':'437e8d69'}), info={'mime_type':'text/json'})\n```\n\nThe new file can now be seen in the contents listing:\n\n\n```python\nhv.archive.contents()\n```\n\nYou can get a more direct list of filenames using the ``listing`` method:\n\n\n```python\nlisting = hv.archive.listing()\nlisting\n```\n\nIn this way, you should be able to automatically generate output files, with customizable filenames, storing any data or metadata you like along with them so that you can keep track of all the important information for reproducing these results later.", "start_char_idx": 2, "end_char_idx": 1202, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "61deba78-0591-4cfd-aeeb-e3fbd4c4a6f7": {"__data__": {"id_": "61deba78-0591-4cfd-aeeb-e3fbd4c4a6f7", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "203fa610-45d8-44b4-9494-a95695790a68", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "14904f5ca083d6691e9378ccc8b25cde77d0e437edc53cbc5564bab430e78c33", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e27d941c-1b61-4e04-b0e9-a5beb00e2d1f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "42787163df853e4baab4819e946dcd6fa8852db169256d47cea74c3b283332bf", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a04e6fe9-7488-42e9-b81a-e47557b725fa", "node_type": "1", "metadata": {}, "hash": "326d3cf3297a70a450988b87777b0d790afe1b89aa078bff857142a4e5527c2e", "class_name": "RelatedNodeInfo"}}, "hash": "35e18a92cc0aba2376cf3f242399aa4f2070ded611e0e69d1b18bcd18a96ac06", "text": "Controlling the behavior of ``hv.archive``\n\nThe ``hv.archive`` object provides numerous parameters that can be changed. You can e.g.:\n\n- output the whole directory to a single compressed ZIP or tar archive file (e.g. ``hv.archive.param.update(pack=False, archive_format='zip')`` or ``archive_format='tar'``)\n\n- generate a new directory or archive every time the notebook is run (``hv.archive.uniq_name=True``); otherwise the old output directory is erased each time \n\n- choose your own name for the output directory or archive (e.g. ``hv.archive.export_name=\"{timestamp}\"``)\n\n- change the format of the optional timestamp (e.g. to retain snapshots hourly, ``archive.param.update(export_name=\"{timestamp}\", timestamp_format=\"%Y_%m_%d-%H\")``)\n\n- select PNG output, at a specified rendering resolution: ``hv.archive.exporters=[hv.renderer('bokeh').instance(size=50)])\n``\n\nThese options and any others listed above can all be set in the ``hv.archive.auto()`` call at the start, for convenience and to ensure that they apply to all of the files that are added.", "start_char_idx": 2, "end_char_idx": 1058, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a04e6fe9-7488-42e9-b81a-e47557b725fa": {"__data__": {"id_": "a04e6fe9-7488-42e9-b81a-e47557b725fa", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8de69e31-7926-49e8-9ee0-21b42e632f57", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b2a095d23177bc12281c90525fac906aba5769f0a188ab2676f1da08e07be2d6", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "61deba78-0591-4cfd-aeeb-e3fbd4c4a6f7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "35e18a92cc0aba2376cf3f242399aa4f2070ded611e0e69d1b18bcd18a96ac06", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ee0d49bf-d5eb-49c8-8283-b90a41fd5482", "node_type": "1", "metadata": {}, "hash": "bf23893054cde1f50b0fd49ea3ab1920aaa5746ba9ce3282f1824a46c7b6b421", "class_name": "RelatedNodeInfo"}}, "hash": "326d3cf3297a70a450988b87777b0d790afe1b89aa078bff857142a4e5527c2e", "text": "Writing the archive to disk\n\nTo actually write the files you have stored in the archive to disk, you need to call ``export()`` after any cell that might contain computation-intensive code. Usually it's best to do so as the last or nearly last cell in your notebook, though here we do it earlier because we wanted to show how to use the exported files.\n\n\n```python\nhv.archive.export()\n```\n\nShortly after the ``export()`` command has been executed, the output should be available as a directory on disk, by default in the same directory as the notebook file, named with the name of the notebook: \n\n\n```python\nimport os\nos.getcwd()\nif os.path.exists(hv.archive.notebook_name):\n print('\\n'.join(sorted(os.listdir(hv.archive.notebook_name))))\n```\n\nFor technical reasons to do with how the IPython Notebook interacts with JavaScript, if you use the Jupyter Notebook command ``Run all``, the ``hv.archive.export()`` command is not actually executed when the cell with that call is encountered during the run. Instead, the ``export()`` is queued until after the final cell in the notebook has been executed. This asynchronous execution has several awkward but not serious consequences:\n\n- It is not possible for the ``export()`` cell to show whether any errors were encountered during exporting, because these will not occur until after the notebook has completed processing. To see any errors, you can run ``hv.archive.last_export_status()`` separately, *after* the ``Run all`` has completed. E.g. just press shift-[Enter] in the following cell, which will tell you whether the previous export was successful.\n\n- If you use ``Run all``, the directory listing ``os.listdir()`` above will show the results from the *previous* time this notebook was run, since it executes before the export. Again, you can use shift-[Enter] to update the data once complete.\n\n- The ``Export name:`` in the output of ``hv.archive.export()`` will not always show the actual name of the directory or archive that will be created. In particular, it may say ``{notebook}``, which when saving will actually expand to the name of your Jupyter Notebook.\n\n\n```python\nhv.archive.last_export_status()\n```", "start_char_idx": 2, "end_char_idx": 2181, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ee0d49bf-d5eb-49c8-8283-b90a41fd5482": {"__data__": {"id_": "ee0d49bf-d5eb-49c8-8283-b90a41fd5482", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "69001c19-cdbb-48c5-91d5-960991512791", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dcb271d29ca3e83e999e2b044a18ffa49b4b89eede71f8130ea40c6104d57497", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a04e6fe9-7488-42e9-b81a-e47557b725fa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "326d3cf3297a70a450988b87777b0d790afe1b89aa078bff857142a4e5527c2e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8f9b11a2-ef31-4cba-9363-f78a0130bc7c", "node_type": "1", "metadata": {}, "hash": "5a1b21d1e196c6a92d8b83e260d4cbfd0713579a0f4be42b8e720a94e8b2eeb4", "class_name": "RelatedNodeInfo"}}, "hash": "bf23893054cde1f50b0fd49ea3ab1920aaa5746ba9ce3282f1824a46c7b6b421", "text": "Accessing your saved data\n\nBy default, HoloViews saves not only your rendered plots (PNG, SVG, etc.), but also the actual HoloViews objects that the plots visualize, which contain all your actual data. The objects are stored in compressed Python pickle files (``.hvz``), which are visible in the directory listings above but have been ignored until now. The plots are what you need for writing a document, but the raw data is is a crucial record to keep as well. For instance, you now can load in the HoloViews object, and manipulate it just as you could when it was originally defined. E.g. we can re-load our ``Levels`` ``Overlay`` file, which has the contours overlaid on top of the image, and easily pull out the underlying ``Image`` object:\n\n\n```python\nimport os\nfrom holoviews.core.io import Unpickler\nc, a = None,None\nhvz_file = [f for f in listing if f.endswith('hvz')][0]\npath = os.path.join(hv.archive.notebook_name, hvz_file)\n\nif os.path.isfile(path):\n print('Unpickling {filename}'.format(filename=hvz_file))\n obj = Unpickler.load(open(path,\"rb\"))\n print(obj)\nelse:\n print('Could not find file {path}'.format(path=path))\n print('Current directory is {cwd}'.format(cwd=os.getcwd()))\n print('Containing files and directories: {listing}'.format(listing=os.listdir(os.getcwd())))\n```\n\nGiven the ``Image``, you can also access the underlying array data, because HoloViews objects are simply containers for your data and associated metadata. This means that years from now, as long as you can still run HoloViews, you can now easily re-load and explore your data, plotting it entirely different ways or running different analyses, even if you no longer have any of the original code you used to generate the data. All you need is HoloViews, which is permanently archived on GitHub and is fully open source and thus should always remain available. Because the data is stored conveniently in the archive alongside the figure that was published, you can see immediately which file corresponds to the data underlying any given plot in your paper, and immediately start working with the data, rather than laboriously trying to reconstruct the data from a saved figure.\n\nIf you do not want the pickle files, you can of course turn them off if you prefer, by changing ``hv.archive.auto()`` to:\n\n```python\nhv.archive.auto(exporters=[hv.renderer('matplotlib').instance(holomap=None)])\n```\n\nHere, the exporters list has been updated to include the usual default exporters *without* the `Pickler` exporter that would usually be included.", "start_char_idx": 2, "end_char_idx": 2558, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8f9b11a2-ef31-4cba-9363-f78a0130bc7c": {"__data__": {"id_": "8f9b11a2-ef31-4cba-9363-f78a0130bc7c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8570d3d0-adf2-40f8-b7bf-cd50eab51139", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f8fdaeebe051e6775390008d5fe76eac36c5be9bd917b25e4e423971e66967b3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ee0d49bf-d5eb-49c8-8283-b90a41fd5482", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bf23893054cde1f50b0fd49ea3ab1920aaa5746ba9ce3282f1824a46c7b6b421", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "351de9da-d92b-4dff-9215-8fc8968b2b78", "node_type": "1", "metadata": {}, "hash": "110ac14d72a40436970d3a34591c3f09c02f650780444f879056a8a133901ab9", "class_name": "RelatedNodeInfo"}}, "hash": "5a1b21d1e196c6a92d8b83e260d4cbfd0713579a0f4be42b8e720a94e8b2eeb4", "text": "Using HoloViews to do reproducible research\n\nThe export options from HoloViews help you establish a feasible workflow for doing reproducible research: starting from interactive exploration, either export specific files with ``hv.save``, or enable ``hv.archive.auto()``, which will store a copy of your notebook and its output ready for inclusion in a document but retaining the complete recipe for reproducing the results later.", "start_char_idx": 2, "end_char_idx": 430, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "351de9da-d92b-4dff-9215-8fc8968b2b78": {"__data__": {"id_": "351de9da-d92b-4dff-9215-8fc8968b2b78", "embedding": null, "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "dc74b21b-f5eb-4e9b-ae19-76e99d2f63da", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0a6f17bca20643ea852d8d289aecdd0495dc4edf4cd984456d175c81f89cf8fe", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8f9b11a2-ef31-4cba-9363-f78a0130bc7c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5a1b21d1e196c6a92d8b83e260d4cbfd0713579a0f4be42b8e720a94e8b2eeb4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bec560f8-7972-4d4c-9c0c-de6365dfa02e", "node_type": "1", "metadata": {}, "hash": "97d1a5c8bc04c57b2509d58fbe3d5fd1273482e5fef3d56dad4e1a04b5114510", "class_name": "RelatedNodeInfo"}}, "hash": "110ac14d72a40436970d3a34591c3f09c02f650780444f879056a8a133901ab9", "text": "Why reproducible research matters\n\nTo understand why these capabilities are important, let's consider the process by which scientific results are typically generated and published without HoloViews. Scientists and engineers use a wide variety of data-analysis tools, ranging from GUI-based programs like Excel spreadsheets, mixed GUI/command-line programs like Matlab, or purely scriptable tools like matplotlib or bokeh. The process by which figures are created in any of these tools typically involves copying data from its original source, selecting it, transforming it, choosing portions of it to put into a figure, choosing the various plot options for a subfigure, combining different subfigures into a complete figure, generating a publishable figure file with the full figure, and then inserting that into a report or publication. \n\nIf using GUI tools, often the final figure is the only record of that process, and even just a few weeks or months later a researcher will often be completely unable to say precisely how a given figure was generated. Moreover, this process needs to be repeated whenever new data is collected, which is an error-prone and time-consuming process. The lack of records is a serious problem for building on past work and revisiting the assumptions involved, which greatly slows progress both for individual researchers and for the field as a whole. Graphical environments for capturing and replaying a user's GUI-based workflow have been developed, but these have greatly restricted the process of exploration, because they only support a few of the many analyses required, and thus they have rarely been successful in practice. With GUI tools it is also very difficult to \"curate\" the sequence of steps involved, i.e., eliminating dead ends, speculative work, and unnecessary steps, with a goal of showing the clear path from incoming data to a final figure.\n\nIn principle, using scriptable or command-line tools offers the promise of capturing the steps involved, in a form that can be curated. In practice, however, the situation is often no better than with GUI tools, because the data is typically taken through many manual steps that culminate in a published figure, and without a laboriously manually created record of what steps are involved, the provenance of a given figure remains unknown. Where reproducible workflows are created in this way, they tend to be \"after the fact\", as an explicit exercise to accompany a publication, and thus (a) they are rarely done, (b) they are very difficult to do if any of the steps were not recorded originally. \n\nA Jupyter notebook helps significantly to make the scriptable-tools approach viable, by recording both code and the resulting output, and can thus in principle act as a record for establishing the full provenance of a figure. But because typical plotting libraries require so much plotting-specific code before any plot is visible, the notebook quickly becomes unreadable. To make notebooks readable, researchers then typically move the plotting code for a specific figure to some external file, which then drifts out of sync with the notebook so that the notebook no longer acts as a record of the link between the original data and the resulting figure. \n\nHoloViews provides the final missing piece in this approach, by allowing researchers to work directly with their data interactively in a notebook, using small amounts of code that focus on the data and analyses rather than plotting code, yet showing the results directly alongside the specification for generating them. This user guide will describe how use a Jupyter notebook with HoloViews to export your results in a way that preserves the information about how those results were generated, providing a clear chain of provenance and making reproducible research practical at last.\n\nFor more information on how HoloViews can help build a reproducible workflow, see our 2015 paper on using HoloViews for reproducible research.", "start_char_idx": 2, "end_char_idx": 3999, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bec560f8-7972-4d4c-9c0c-de6365dfa02e": {"__data__": {"id_": "bec560f8-7972-4d4c-9c0c-de6365dfa02e", "embedding": null, "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f1a6e385-1887-41e1-808d-b333e60d0f2e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7a7b6e5157fa955f353664d0a416bc1e66c2cad663784896849c1e69b78cb631", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "351de9da-d92b-4dff-9215-8fc8968b2b78", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "110ac14d72a40436970d3a34591c3f09c02f650780444f879056a8a133901ab9", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "670503c8-b147-47c9-9fac-b8951cbd7d29", "node_type": "1", "metadata": {}, "hash": "2ab7cc0af4ea049ed2fe9c7d44f387a5fc7079fe296e1908a882100d9914ab6c", "class_name": "RelatedNodeInfo"}}, "hash": "97d1a5c8bc04c57b2509d58fbe3d5fd1273482e5fef3d56dad4e1a04b5114510", "text": "Representing paths\n\nThe ``Path`` element represents a collection of path geometries with optional associated values. Each path geometry may be split into sub-geometries on NaN-values and may be associated with scalar values or array values varying along its length. In analogy to GEOS geometry types a Path is a collection of LineString and MultiLineString geometries with associated values.\n\nWhile other formats can be supported through extensible interfaces (e.g. geopandas and shapely objects in GeoViews), natively HoloViews provides support for representing paths as one or more columnar data-structures including arrays, dataframes and dictionaries of column arrays and scalars. A simple path geometry may therefore be drawn using:\n\n\n```python\nhv.Path({'x': [1, 2, 3, 4, 5], 'y': [0, 0, 1, 1, 2]}, ['x', 'y'])\n```\n\nHere the dictionary of x- and y-coordinates could also be an NumPy array with two columns or a dataframe with 'x' and 'y' columns.\n\nTo draw multiple paths the data-structures can be wrapped in a list. Additionally, it is also possible to associate a value with each path by declaring it as a value dimension:\n\n\n```python\np = hv.Path([{'x': [1, 2, 3, 4, 5], 'y': [0, 0, 1, 1, 2], 'value': 0},\n {'x': [5, 4, 3, 2, 1], 'y': [2, 2, 1, 1, 0], 'value': 1}], vdims='value').opts(color='value')\np\n```", "start_char_idx": 2, "end_char_idx": 1327, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "670503c8-b147-47c9-9fac-b8951cbd7d29": {"__data__": {"id_": "670503c8-b147-47c9-9fac-b8951cbd7d29", "embedding": null, "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7f3fdc35-bfb2-4491-a3cf-9637ed19b215", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8b6be35b9b13b7fef43b0c2839b22c828b6665575f84babfc3f0bfc209dcfb99", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bec560f8-7972-4d4c-9c0c-de6365dfa02e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "97d1a5c8bc04c57b2509d58fbe3d5fd1273482e5fef3d56dad4e1a04b5114510", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "de7800ae-0f0a-4cc8-b7f6-7c476157a871", "node_type": "1", "metadata": {}, "hash": "06d1d043d653d41fd4bc34939c6f04af1c9d8e63c8836a571d4170068430d267", "class_name": "RelatedNodeInfo"}}, "hash": "2ab7cc0af4ea049ed2fe9c7d44f387a5fc7079fe296e1908a882100d9914ab6c", "text": "Multi-geometry\n\nSplitting the geometries in this way allows assigning separate values to each geometry, however often multiple geometries share the same value in which case it may be desirable to represent them as a multi-geometry by combining the coordinates and separating them by a NaN value:\n\n\n```python\nhv.Path([{'x': [1, 2, 3, 4, 5, np.nan, 5, 4, 3, 2, 1],\n 'y': [0, 0, 1, 1, 2, np.nan, 2, 2, 1, 1, 0], 'value': 0}],\n vdims='value').opts(color='value')\n```\n\nThis represents a more efficient format particularly when there are very many small geometries with the same value.", "start_char_idx": 2, "end_char_idx": 597, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "de7800ae-0f0a-4cc8-b7f6-7c476157a871": {"__data__": {"id_": "de7800ae-0f0a-4cc8-b7f6-7c476157a871", "embedding": null, "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8baff44d-944e-4e85-b9df-618e0a55d396", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3c72fdce198bf6b7d808781dae25a31d666efbad309bb4879afa8ad04756564a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "670503c8-b147-47c9-9fac-b8951cbd7d29", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2ab7cc0af4ea049ed2fe9c7d44f387a5fc7079fe296e1908a882100d9914ab6c", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "805f1f1b-f8cb-4105-9eec-852190e4e845", "node_type": "1", "metadata": {}, "hash": "132b0b1842b8ae2ba804d00dcc2a825afdb5dd2c55e8fb50fe11fbe9474f28b1", "class_name": "RelatedNodeInfo"}}, "hash": "06d1d043d653d41fd4bc34939c6f04af1c9d8e63c8836a571d4170068430d267", "text": "Scalar vs. continuously varying value dimensions\n\nUnlike ``Contours`` which are limited to representing iso-contours or isoclines, i.e. a function of two variables which describes a curve along which the function has a constant value, a ``Path`` element may also have continuously varying values along its path. Below we will declare a path with a value that varies along its path:\n\n\n```python\na, b, delta = 3, 5, np.pi/2.\n\nvs = np.linspace(0, np.pi*2, 200)\nxs = np.sin(a * vs + delta)\nys = np.sin(b * vs)\n\nhv.Path([{'x': xs, 'y': ys, 'value': vs}], vdims='value').opts(\n color='value', cmap='hsv')\n```\n\nNote that since not all data formats allow storing scalar values as actual scalars, 1D-arrays matching the length of the coordinates but with only one unique value are also considered scalar. For example the following is a valid ``Contours`` element despite the fact that the value dimension is not a scalar variable:\n\n\n```python\nhv.Contours([{'x': xs, 'y': ys, 'value': np.ones(200)}], vdims='value').opts(color='value')\n```", "start_char_idx": 2, "end_char_idx": 1034, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "805f1f1b-f8cb-4105-9eec-852190e4e845": {"__data__": {"id_": "805f1f1b-f8cb-4105-9eec-852190e4e845", "embedding": null, "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "965eac7a-2f52-4f49-a08a-5bc4d2a0089e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "edb938724d1910efff3ff74a98d5ceea15c90f53716a3fa2e37e6b45a3b25c22", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "de7800ae-0f0a-4cc8-b7f6-7c476157a871", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "06d1d043d653d41fd4bc34939c6f04af1c9d8e63c8836a571d4170068430d267", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cdb797b1-9104-4748-be30-6d9e48d7185f", "node_type": "1", "metadata": {}, "hash": "cf3069bd95668a2328d91ab8af06eb460a47ff5d91f68f13f67177bdf8fff76e", "class_name": "RelatedNodeInfo"}}, "hash": "132b0b1842b8ae2ba804d00dcc2a825afdb5dd2c55e8fb50fe11fbe9474f28b1", "text": "Representing Polygons\n\nThe ``Polygons`` element represents a collection of polygon geometries with associated scalar values. Each polygon geometry may be split into sub-geometries on NaN-values and may be associated with scalar values. In analogy to GEOS geometry types a ``Polygons`` element is a collection of Polygon and MultiPolygon geometries. Polygon geometries are defined as a set of coordinates describing the exterior bounding ring and any number of interior holes.\n\nIn summary ``Polygons`` can be represented in much the same way as ``Paths`` above but have a special reserved key to store the polygon interiors or 'holes'. The holes are stored as a list-of-lists of arrays. This nested format is necessary to unambiguously associate holes with the sub-geometries in a multi-geometry. In the simplest case of a single Polygon geometry the format looks like this:\n\n\n```python\nxs = [1, 2, 3]\nys = [2, 0, 7]\nholes = [[[(1.5, 2), (2, 3), (1.6, 1.6)], [(2.1, 4.5), (2.5, 5), (2.3, 3.5)]]]\n\nhv.Polygons([{'x': xs, 'y': ys, 'holes': holes}])\n```\n\nThe 'x' and 'y' coordinates represent the exterior of the Polygon and the list-of-list of holes defines two interior regions inside the polygon.\n\nIn a multi-Polygon arrangement where two Polygon geometries are separated by NaNs, the purpose of the nested format becomes a bit clearer. Here the polygon from above still has the two holes but the second polygon does not have any holes, which we declare with an empty list:\n\n\n```python\nxs = [1, 2, 3, np.nan, 6, 7, 3]\nys = [2, 0, 7, np.nan, 7, 5, 2]\n\nholes = [\n [[(1.5, 2), (2, 3), (1.6, 1.6)], [(2.1, 4.5), (2.5, 5), (2.3, 3.5)]],\n []\n]\n\nhv.Polygons([{'x': xs, 'y': ys, 'holes': holes}])\n```\n\nIf a polygon has no holes at all the 'holes' key may be omitted entirely:\n\n\n```python\nhv.Polygons([{'x': xs, 'y': ys, 'holes': holes, 'value': 0},\n {'x': [4, 6, 6], 'y': [0, 2, 1], 'value': 1},\n {'x': [-3, -1, -6], 'y': [3, 2, 1], 'value': 3}], vdims='value')\n```", "start_char_idx": 2, "end_char_idx": 1988, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cdb797b1-9104-4748-be30-6d9e48d7185f": {"__data__": {"id_": "cdb797b1-9104-4748-be30-6d9e48d7185f", "embedding": null, "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8dc32287-c4ef-4821-bc7d-a578ddb160d0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fdc2b46a3a7943989d2effebf66a950b6f9dc1c634881be0333481733cc9b81a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "805f1f1b-f8cb-4105-9eec-852190e4e845", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "132b0b1842b8ae2ba804d00dcc2a825afdb5dd2c55e8fb50fe11fbe9474f28b1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fbce6df5-e270-4c01-828f-5db174cdb79a", "node_type": "1", "metadata": {}, "hash": "b98c32aff1f268b80b2dd7b284efb7dc706d3b57026b0c7c1e24827b6efed9d7", "class_name": "RelatedNodeInfo"}}, "hash": "cf3069bd95668a2328d91ab8af06eb460a47ff5d91f68f13f67177bdf8fff76e", "text": "Accessing the data\n\nTo access the underlying data the geometry elements (``Path``/``Contours``/``Polygons``) implement a ``split`` method. By default it simply returns a list of elements, where each contains only one geometry:\n\n\n```python\npoly = hv.Polygons([\n {'x': xs, 'y': ys, 'holes': holes, 'value': 0},\n {'x': [4, 6, 6], 'y': [0, 2, 1], 'value': 1}\n], vdims='value')\n\nhv.Layout(poly.split())\n```\n\nUsing the ``datatype`` argument the data may instead be returned in the desired format, e.g. 'dictionary', 'array' or 'dataframe'. Here we return the 'dictionary' format:\n\n\n```python\npoly.split(datatype='dictionary')\n```\n\nNote that this conversion may be lossy if the converted format has no way of representing 'holes' or other data.", "start_char_idx": 2, "end_char_idx": 745, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fbce6df5-e270-4c01-828f-5db174cdb79a": {"__data__": {"id_": "fbce6df5-e270-4c01-828f-5db174cdb79a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9f2c2cba-3177-44af-ba2f-56ceca941746", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3366ee50a894944c95796c220ad96720a2d90d051e13732de986ee2d2383d28d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cdb797b1-9104-4748-be30-6d9e48d7185f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cf3069bd95668a2328d91ab8af06eb460a47ff5d91f68f13f67177bdf8fff76e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e6b009d0-9a61-481e-b393-dca2ce4921e4", "node_type": "1", "metadata": {}, "hash": "04e25ed90efac8eda55dc152e0dd38ef6d66b4791912ca0666028d03a36b40eb", "class_name": "RelatedNodeInfo"}}, "hash": "b98c32aff1f268b80b2dd7b284efb7dc706d3b57026b0c7c1e24827b6efed9d7", "text": "Installing and Configuring Holoviews\n\nHoloViews can be installed on any platform where NumPy and Python 3 are available.\n\nThat said, HoloViews is designed to work closely with many other libraries, which can make installation and configuration more complicated. This user guide page describes some of these less-common or not-required options that may be helpful for some users.", "start_char_idx": 2, "end_char_idx": 381, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e6b009d0-9a61-481e-b393-dca2ce4921e4": {"__data__": {"id_": "e6b009d0-9a61-481e-b393-dca2ce4921e4", "embedding": null, "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "60bf2fe4-7c0d-4369-b00c-713ab442f52e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1240c809043f75b44b0a03b92ee826f959162327b5117129213b698ae3240098", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fbce6df5-e270-4c01-828f-5db174cdb79a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b98c32aff1f268b80b2dd7b284efb7dc706d3b57026b0c7c1e24827b6efed9d7", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2ef2e53a-8433-42d3-af2e-7992de34ca6e", "node_type": "1", "metadata": {}, "hash": "e973366545c41313b7689d97ced8eb3429ccf40aec8a30efe177b5089bb8f1fa", "class_name": "RelatedNodeInfo"}}, "hash": "04e25ed90efac8eda55dc152e0dd38ef6d66b4791912ca0666028d03a36b40eb", "text": "Other installation options\n\nThe main installation instructions should be sufficient for most users, but you may also want the Matplotlib and Plotly backends, which are required for some of the examples:\n\n conda install matplotlib plotly\n\nHoloViews can also be installed using one of these `pip` commands:\n\n pip install holoviews\n pip install 'holoviews[recommended]'\n pip install 'holoviews[extras]'\n pip install 'holoviews[all]'\n\nThe first option installs just the bare library and the NumPy and Param libraries, which is all you need on your system to generate and work with HoloViews objects without visualizing them. The other options install additional libraries that are often useful, with the `recommended` option being similar to the `conda` install command above.\n\nBetween releases, development snapshots are made available as conda packages:\n\n conda install -c pyviz/label/dev holoviews\n\nTo get the very latest development version you can clone our git\nrepository and put it on the Python path:\n\n git clone https://github.com/holoviz/holoviews.git\n cd holoviews\n pip install -e .", "start_char_idx": 2, "end_char_idx": 1118, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2ef2e53a-8433-42d3-af2e-7992de34ca6e": {"__data__": {"id_": "2ef2e53a-8433-42d3-af2e-7992de34ca6e", "embedding": null, "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "97d474b4-12f5-490d-bc74-6a61071b595e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "88309044bcda790864d4d385839ecf6dbe136cb7be83ab98695ab863d5dd96ed", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e6b009d0-9a61-481e-b393-dca2ce4921e4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "04e25ed90efac8eda55dc152e0dd38ef6d66b4791912ca0666028d03a36b40eb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a0d53bc0-ef73-4e92-a8d2-dc785221156c", "node_type": "1", "metadata": {}, "hash": "5b76a8c231482a1ba4f0caef5127d376a5f0f2a1e4900a3b4301b62bb51ebe41", "class_name": "RelatedNodeInfo"}}, "hash": "e973366545c41313b7689d97ced8eb3429ccf40aec8a30efe177b5089bb8f1fa", "text": "JupyterLab configuration\n\nTo work with JupyterLab you will also need the HoloViews JupyterLab\nextension:\n\n```\nconda install -c conda-forge jupyterlab\njupyter labextension install @pyviz/jupyterlab_pyviz\n```\n\nOnce you have installed JupyterLab and the extension launch it with:\n\n```\njupyter-lab\n```", "start_char_idx": 2, "end_char_idx": 299, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a0d53bc0-ef73-4e92-a8d2-dc785221156c": {"__data__": {"id_": "a0d53bc0-ef73-4e92-a8d2-dc785221156c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a3107bba-7963-481b-9eb6-96d7fc45d10f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "266f3f527695293bfbfe54638be68975c442347c7be1094db0f5f057a1ec25c6", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2ef2e53a-8433-42d3-af2e-7992de34ca6e", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e973366545c41313b7689d97ced8eb3429ccf40aec8a30efe177b5089bb8f1fa", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fb2877c7-94e9-4f31-a07f-9582a27346e3", "node_type": "1", "metadata": {}, "hash": "c02b69697124ab7cc34c4cd37b5072d37f70616a13cc352d7bc136c071292952", "class_name": "RelatedNodeInfo"}}, "hash": "5b76a8c231482a1ba4f0caef5127d376a5f0f2a1e4900a3b4301b62bb51ebe41", "text": "``hv.config`` settings\n\nThe default HoloViews installation will use the latest defaults and options available, which is appropriate for new users. If you want to work with code written for older HoloViews versions, you can use the top-level ``hv.config`` object to control various backwards-compatibility options:\n\n* ``future_deprecations``: Enables warnings about future deprecations (introduced in 1.11).\n* ``warn_options_call``: Warn when using the to-be-deprecated ``__call__`` syntax for specifying options, instead of the recommended ``.opts`` method.\n\nIt is recommended you set ``warn_options_call`` to ``True`` in your holoviews.rc file (see section below).\n\nIt is possible to set the configuration using `hv.config` directly:\n\n\n```python\nimport holoviews as hv\nhv.config(future_deprecations=True)\n```\n\nHowever, because in some cases this configuration needs to be declared before the plotting extensions are imported, the recommended way of setting configuration options is:\n\n\n```python\nhv.extension('bokeh', config=dict(future_deprecations=True))\n```\n\nIn addition to backwards-compatibility options, ``hv.config`` holds some global options:\n\n* ``image_rtol``: The tolerance used to enforce regular sampling for regular, gridded data. Used to validate ``Image`` data.\n\nThis option allows you to set the ``rtol`` parameter of ``Image`` elements globally.", "start_char_idx": 2, "end_char_idx": 1365, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fb2877c7-94e9-4f31-a07f-9582a27346e3": {"__data__": {"id_": "fb2877c7-94e9-4f31-a07f-9582a27346e3", "embedding": null, "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "73b936e1-993e-4dcc-850e-d739c6459dfb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6c238854ec8ca118dd380518f740b297131d3e8e032c79be697f4b54b3706db2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a0d53bc0-ef73-4e92-a8d2-dc785221156c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5b76a8c231482a1ba4f0caef5127d376a5f0f2a1e4900a3b4301b62bb51ebe41", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "b360c455-2ba0-4d2d-b2d2-7f13cd83abed", "node_type": "1", "metadata": {}, "hash": "18b698a44813b7398364f19058ec2fb29e13f089dc0cad3bb35c07e57cf82cfc", "class_name": "RelatedNodeInfo"}}, "hash": "c02b69697124ab7cc34c4cd37b5072d37f70616a13cc352d7bc136c071292952", "text": "Improved tab-completion\n\nBoth ``Layout`` and ``Overlay`` are designed around convenient tab-completion, with the expectation of upper-case names being listed first. In recent versions of Jupyter/IPython there has been a regression whereby the tab-completion is no longer case-sensitive. This can be fixed with:\n\n\n```python\nimport holoviews as hv\nhv.extension(case_sensitive_completion=True)\n```", "start_char_idx": 2, "end_char_idx": 396, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "b360c455-2ba0-4d2d-b2d2-7f13cd83abed": {"__data__": {"id_": "b360c455-2ba0-4d2d-b2d2-7f13cd83abed", "embedding": null, "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "11a8b2ea-3717-40f0-8e7a-6f0e68e520c1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4fe6c12676ea4c42ec566a832bdfb4be556c11401e223327aef593369e474e6a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fb2877c7-94e9-4f31-a07f-9582a27346e3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c02b69697124ab7cc34c4cd37b5072d37f70616a13cc352d7bc136c071292952", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bb51bdf6-c53c-429d-8f7f-a65eb14f752c", "node_type": "1", "metadata": {}, "hash": "380c04e07b732f819a79de5db636659f7adfccf5faee8db2a623e358630abf25", "class_name": "RelatedNodeInfo"}}, "hash": "18b698a44813b7398364f19058ec2fb29e13f089dc0cad3bb35c07e57cf82cfc", "text": "The holoviews.rc file\n\nHoloViews searches for the first rc file it finds in the following places (in order): \n\n1. ``holoviews.rc`` in the parent directory of the top-level ``__init__.py`` file (useful for developers working out of the HoloViews git repo)\n2. ``~/.holoviews.rc``\n3. ``~/.config/holoviews/holoviews.rc``\n\nThe rc file location can be overridden via the ``HOLOVIEWSRC`` environment variable.\n\nThe rc file is a Python script, executed as HoloViews is imported. An example rc file to include various options discussed above might look like this:\n\n```\nimport holoviews as hv\nhv.config(warn_options_call=True)\nhv.extension.case_sensitive_completion=True\n```", "start_char_idx": 2, "end_char_idx": 667, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bb51bdf6-c53c-429d-8f7f-a65eb14f752c": {"__data__": {"id_": "bb51bdf6-c53c-429d-8f7f-a65eb14f752c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5e183b2c-b341-4b66-8e17-7c9523bea423", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2d11d973307a04de56cae1bda7b754adcd1506d9cc3eb87c99c1d34840d742b7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "b360c455-2ba0-4d2d-b2d2-7f13cd83abed", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "18b698a44813b7398364f19058ec2fb29e13f089dc0cad3bb35c07e57cf82cfc", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ead5e818-694f-44c1-869d-8b62ae120a72", "node_type": "1", "metadata": {}, "hash": "9b5afc3e80b8517405025654045b5021fc56344447cc5c3b785d19817306e0b0", "class_name": "RelatedNodeInfo"}}, "hash": "380c04e07b732f819a79de5db636659f7adfccf5faee8db2a623e358630abf25", "text": "JavaScript-based linked brushing\n\nDatasets very often have more dimensions than can be shown in a single plot, which is why HoloViews offers so many ways to show the data from each of these dimensions at once (via layouts, overlays, grids, holomaps, etc.). However, even once the data has been displayed, it can be difficult to relate data points between the various plots that are laid out together. For instance, \"is the outlier I can see in this x,y plot the same datapoint that stands out in this w,z plot\"? \"Are the datapoints with high x values in this plot also the ones with high w values in this other plot?\" Since points are not usually visibly connected between plots, answering such questions can be difficult and tedious, making it difficult to understand multidimensional datasets. Linked brushing (also called \"brushing and linking\") offers an easy way to understand how data points and groups of them relate across different plots. Here \"brushing\" refers to selecting data points or ranges in one plot, with \"linking\" then highlighting those same points or ranges in other plots derived from the same data.\n\nAs an example, consider the standard \"autompg\" dataset:\n\n\n```python\nfrom bokeh.sampledata.autompg import autompg\nautompg\n```\n\nThis dataset contains specifications for 392 different types of car models from 1970 to 1982. Each car model represents a particular point in a nine-dimensional space, with a certain **mpg**, **cyl**, **displ**, **hp**, **weight**, **accel**, **yr**, **origin**, and **name**. We can use a gridmatrix to see how each numeric dimension relates to the others:\n\n\n```python\nautompg_ds = hv.Dataset(autompg, ['yr', 'name', 'origin'])\n\nmopts = opts.Points(size=2, tools=['box_select','lasso_select'], active_tools=['box_select'])\n\ngridmatrix(autompg_ds, chart_type=hv.Points).opts(mopts)\n```\n\nThese plots show all sorts of interesting relationships already, such as that weight and horsepower are highly positively correlated (locate _weight_ along one axis and _hp_ along the other, and you can see that car models with high weight almost always have high horsepower and vice versa).\n\nWhat if we want to focus specifically on the subset of cars that have 4 cylinders (*cyl*)? You can do that by pre-filtering the dataframe in Python, but questions like that can be answered immediately using linked brushing, which is automatically supported by `gridmatrix` plots like this one. First, make sure the \"box select\" or \"lasso select\" tool is selected in the toolbar:\n\n\n\nThen pick one of the points plots labeled _cyl_ and use the selection tool to select all the values where _cyl_ is 4. All of those points in each plot should remain blue, while the points where _cyl_ is not 4 become more transparent: \n\n\n\nYou should be able to see that 4-cylinder models have low displacement (*displ*), low horsepower (*hp*), and low weight, but tend to have higher fuel efficiency (*mpg*). Repeatedly selecting subsets of the data in this way can help you understand properties of a multidimensional dataset that may not be visible in the individual plots, without requiring coding and examining additional plots.", "start_char_idx": 2, "end_char_idx": 3145, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ead5e818-694f-44c1-869d-8b62ae120a72": {"__data__": {"id_": "ead5e818-694f-44c1-869d-8b62ae120a72", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ead739f4-fc9e-41c5-8b63-b63b79e218b8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c02549ba138c17090d8c001c6866568cc7d71a13309f4d11347d158eaf3e2a56", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bb51bdf6-c53c-429d-8f7f-a65eb14f752c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "380c04e07b732f819a79de5db636659f7adfccf5faee8db2a623e358630abf25", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bbd3fad0-5b50-4035-9678-15261676dac2", "node_type": "1", "metadata": {}, "hash": "b648ed95dda32d7e2b260e0052866150a576960c4a5bef62f4e5255a4d11b17e", "class_name": "RelatedNodeInfo"}}, "hash": "9b5afc3e80b8517405025654045b5021fc56344447cc5c3b785d19817306e0b0", "text": "Python-based linked brushing\n\nThe above example illustrates Bokeh's very useful automatic JavaScript-based linked brushing, which can be enabled for Bokeh plots sharing a common data source (as in the `gridmatrix` call) by simply adding a selection tool. However, this approach offers only a single type of selection, and is not available for Python-based data-processing pipelines such as those using Datashader.\n\nTo get more power and flexibility (at the cost of requiring a Python server for deployment if you weren't already), HoloViews provides a Python-based implementation of linked brushing. HoloViews linked brushing lets you fully customize what elements are used and how linking behaves. Here, let's make a custom Layout displaying some Scatter plots for just a few of the available dimensions:\n\n\n```python\ncolors = hv.Cycle('Category10').values\ndims = [\"cyl\", \"displ\", \"hp\", \"mpg\", \"weight\", \"yr\"]\n\nlayout = hv.Layout([\n hv.Points(autompg_ds, dims).opts(color=c)\n for c, dims in zip(colors, [[d,'accel'] for d in dims])\n])\n\nprint(layout)\n```\n\nNow that we have a layout we can simply apply the `link_selections` operation to support linked brushing, automatically linking the selections across an arbitrary collection of plots that are derived from the same dataset:\n\n\n```python\nlink_selections(layout).opts(opts.Points(width=200, height=200)).cols(6)\n```\n\nThe same `box_select` and `lasso_select` tools should now work as for the `gridmatrix` plot, but this time by calling back to Python. There are now many more options and capabilities available, as described below, but by default you can now also select additional regions in different elements, and the selected points will be those that match _all_ of the selections, so that you can precisely specify the data points of interest with constraints on _all_ dimensions at once. A bounding box will be shown for each selection, but only the overall selected points (across all selection dimensions) will be highlighted in each plot. You can use the reset tool to clear all the selections and start over.", "start_char_idx": 2, "end_char_idx": 2080, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bbd3fad0-5b50-4035-9678-15261676dac2": {"__data__": {"id_": "bbd3fad0-5b50-4035-9678-15261676dac2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "09a020f7-4ede-4c80-b4a4-3462a8c32a69", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4c0521d6bc751e5adc701eda1bdc5739c41ca47e726ada0ecbabdf8c4d837eba", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ead5e818-694f-44c1-869d-8b62ae120a72", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9b5afc3e80b8517405025654045b5021fc56344447cc5c3b785d19817306e0b0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "200ace01-3df2-46e7-93c7-208b1247382f", "node_type": "1", "metadata": {}, "hash": "8d622f1ebf1fc615d8d0af480cdc70a641c9bec2713370a4bac2d138230433cc", "class_name": "RelatedNodeInfo"}}, "hash": "b648ed95dda32d7e2b260e0052866150a576960c4a5bef62f4e5255a4d11b17e", "text": "Box-select vs Lasso-select\n\nSince HoloViews version 1.13.3 linked brushing supports both the `box_select` and `lasso_select` tools. The lasso selection provides more fine-grained control about the exact region to include in the selection, however it is a much more expensive operation and will not scale as well to very large columnar datasets. Additionally lasso select has a number of dependencies:\n\n* Lasso-select on tabular data requires either `spatialpandas` or `shapely`\n* Lasso-select on gridded data requires `datashader`\n* Lasso-select on geometry data requires `shapely`", "start_char_idx": 2, "end_char_idx": 583, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "200ace01-3df2-46e7-93c7-208b1247382f": {"__data__": {"id_": "200ace01-3df2-46e7-93c7-208b1247382f", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c71255a7a2a792f4478d3c292b603414a446b2121d7e40d5b641180867d34b63", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bbd3fad0-5b50-4035-9678-15261676dac2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b648ed95dda32d7e2b260e0052866150a576960c4a5bef62f4e5255a4d11b17e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0e63265e-2bbf-4647-9bcc-a6b63efddc2b", "node_type": "1", "metadata": {}, "hash": "4b8908aa6d159aaa94dfc008d8a62e09b1b5cb6877bf402fd1e5d6d285446a22", "class_name": "RelatedNodeInfo"}}, "hash": "8d622f1ebf1fc615d8d0af480cdc70a641c9bec2713370a4bac2d138230433cc", "text": "Filter and selection modes\n\nTwo parameters of `link_selections` control how the selections apply within a single element (the `selection_mode`) and across elements (the `cross_filter_mode`):\n\n* `selection_mode`: Determines how to combine successive selections on the same element, either `'overwrite'` (the default, allowing one selection per element), `'intersect'` (taking the intersection of all selections for that element), `'union'` (the combination of all selections for that element), or `'inverse'` (select all _but_ the selection region).\n* `cross_filter_mode`: Determines how to combine selections across different elements, either `'overwrite'` (allows selecting on only a single element at a time) or `'intersect'` (the default, combining selections across all elements).\n\nTo see how these work, we will create a number of views of the autompg dataset:\n\n\n```python\nw_accel_scatter = hv.Scatter(autompg_ds, 'weight', 'accel')\nmpg_hist = histogram(autompg_ds, dimension='mpg', normed=False).opts(color=\"green\")\nviolin = hv.Violin(autompg_ds, [], 'hp')\n```\n\nWe will also capture an \"instance\" of the `link_selections` operation, which will allow us to access and set parameters on it even after we call it:\n\n\n```python\nmpg_ls = link_selections.instance()\n\nmpg_ls(w_accel_scatter + mpg_hist + violin)\n```\n\nHere you can select on both the Scatter plot and the Histogram. With these default settings, selecting on different elements computes the intersection of the two selections, allowing you to e.g. select only the points with high weight but mpg between 20 and 30. In the Scatter plot, the selected region will be shown as a rectangular bounding box, with the unselected points inside being transparent. On the histogram, data points selected on the histogram but not in other selections will be drawn in gray, data points not selected on either element will be transparent, and only those points that are selected in _both_ plots will be shown in the default blue color. The Violin plot does not itself allow selections, but it will update to show the distribution of the selected points, with the original distribution being lighter (more transparent) behind it for comparison. Here, selecting high weights and intermediate mpg gives points with a lower range of horsepower in the Violin plot.\n\nThe way this all works is for each selection to be collected into a shared \"selection expression\" that is then applied by every linked plot after any change to a selection:\n\n\n```python\nmpg_ls.selection_expr\n```\n\ne.g. a box selection on the *weight*,*accel* scatter element might look like this:\n\n```\n(((dim('weight') >= (3125.237)) & (dim('weight') = (13.383))) & (dim('accel') <= (19.678))\n```\n\nAdditional selections in other plots add to this list of filters if enabled, while additional selections within the same plot are combined with an operator that depends on the `selection_mode`.\n\nTo better understand how to configure linked brushing, let's create a Panel that makes widgets for the parameters of the `linked_selection` operation and lets us explore their effect interactively. Play around with different `cross_filter_mode` and `selection_mode` settings and observe their effects (hitting reset when needed to get back to an unselected state):\n\n\n```python\nimport panel as pn\n\nmpg_lsp = link_selections.instance()\n\nparams = pn.Param(mpg_lsp, parameters=[\n 'cross_filter_mode', 'selection_mode', 'show_regions',\n 'selected_color', 'unselected_alpha', 'unselected_color'])\n\npn.Row(params, mpg_lsp(w_accel_scatter + mpg_hist + violin))\n```\n\nNote that in recent versions of Bokeh (>=2.1.0) and HoloViews (1.13.4) it is also possible to toggle the selection mode directly in the Bokeh toolbar by toggling the menu on the box-select and lasso-select tools:\n\n", "start_char_idx": 17572, "end_char_idx": 18403, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bc3ce6f3-dbb8-42b5-8bcf-c4e256dc15e0": {"__data__": {"id_": "bc3ce6f3-dbb8-42b5-8bcf-c4e256dc15e0", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d0f9e178-9328-44c9-a9c5-d30173afcb80", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0e922b167195c7da459765a92c53bca4a8b7c0c14f303fbbae8f9de47f09d2b5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1019a3c4-58de-423b-8e3a-e8baca640a88", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5dca88b34b019372256ede2bb898f43b5bcec9d42957d0008a6d3c8eef1996ec", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ca31436c-b4a7-4316-a6d4-97454ec2f601", "node_type": "1", "metadata": {}, "hash": "1628ed5cb9283be62275a254ffe37c2848ce0d13bc517d82e4018bf7d1a2758e", "class_name": "RelatedNodeInfo"}}, "hash": "d637d239ee744611e4ebd182aa4f50a3c307c3496d6ea67a14353be3f3a862b4", "text": "Index-based selections\n\nSo far we have worked entirely using range-based selections, which result in selection expressions based only on the axis ranges selected, not the actual data points. Range-based selection requires that all selectable dimensions are present on the datasets behind every plot, so that the selection expression can be evaluated to filter every plot down to the correct set of data points. Range-based selections also only support the `box_select` tool, as they are filtering the data based on a rectangular region of the visible space in that plot. (Of course, you can still combine multiple such boxes to build up to selections of other shapes, with `selection_mode='union'`.)\n\nYou can also choose to use index-based selections, which generate expressions based not on axis ranges but on values of one or more index columns (selecting individual, specific data points, as for the Bokeh JavaScript-based linked brushing). For index-based selections, plots can be linked as long as the datasets underlying each plot all have those index columns, so that expressions generated from a selection on one plot can be applied to all of the plots. Ordinarily the index columns should be unique in combination (e.g. Firstname,Lastname), each specifying one particular data point out of your data so that it can be correlated across all plots.\n\nTo use index-based selections, specify the `index_cols` that are present across your elements. In the example below we will load the shapes and names of counties from the US state of Texas and their corresponding unemployment rates. We then generate a choropleth plot and a histogram plot both displaying the unemployment rate.\n\n\n```python\nfrom bokeh.sampledata.us_counties import data as counties\nfrom bokeh.sampledata.unemployment import data as unemployment\n\ncounties = [dict(county, Unemployment=unemployment[cid])\n for cid, county in counties.items()\n if county[\"state\"] == \"tx\"]\n\ndetailed_name = 'detailed_name' if counties[0].get('detailed_name') else 'detailed name' # detailed name was changed in Bokeh 3.0\nchoropleth = hv.Polygons(counties, ['lons', 'lats'], [(detailed_name, 'County'), 'Unemployment'])\nhist = choropleth.hist('Unemployment', adjoin=False, normed=False)\n```\n\nTo link the two we will specify the `'detailed name'` column as the `index_cols`.\n\n\n```python\nlinked_choropleth = link_selections(choropleth + hist, index_cols=['detailed name'])\n```\n\nNow that the two plots are linked we can display them and select individual polygons by tapping or apply a box selection on the histogram:\n\n\n```python\nlinked_choropleth.opts(\n hv.opts.Polygons(tools=['hover', 'tap', 'box_select'], xaxis=None, yaxis=None,\n show_grid=False, show_frame=False, width=500, height=500,\n color='Unemployment', colorbar=True, line_color='white'),\n hv.opts.Histogram(width=500, height=500)\n)\n```\n\nThis type of linked brushing will work even for datasets not including the latitude and longitude axes of the choropleth plot, because each selected county resolves not to a geographic region but to a county name, which can then be used to index into any other dataset that includes the county name for each data point.", "start_char_idx": 2, "end_char_idx": 3234, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ca31436c-b4a7-4316-a6d4-97454ec2f601": {"__data__": {"id_": "ca31436c-b4a7-4316-a6d4-97454ec2f601", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8a83a624-cbd9-4e9a-8275-e8d1cdc2504d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0a7d4f967ea7ed6130260798dd0608c6ca36e777a9fddb94eff56c89f7573f17", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bc3ce6f3-dbb8-42b5-8bcf-c4e256dc15e0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d637d239ee744611e4ebd182aa4f50a3c307c3496d6ea67a14353be3f3a862b4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1ea96c52-f39b-4aec-9827-7837ec0c25ba", "node_type": "1", "metadata": {}, "hash": "146a53ffa50b480798a5bb960c6f1857d2f7418a095dc2795114a05e713cc302", "class_name": "RelatedNodeInfo"}}, "hash": "1628ed5cb9283be62275a254ffe37c2848ce0d13bc517d82e4018bf7d1a2758e", "text": "Styling selections\n\nBy default, unselected objects will be indicated using a lower alpha value specified using the `unselected_alpha` keyword argument, which keeps unselected points the same color but makes them fade into the background. That way it should be safe to call `link_selections` on a plot without altering its visual appearance by default; you'll only see a visible difference once you select something. An alternative is to specify `selected_color` and an `unselected_color`, which can provide a more vivid contrast between the two states. To make sure both colors are visible ensure you also need to override the `unselected_alpha`:\n\n\n```python\nlink_selections(w_accel_scatter + mpg_hist, selected_color='#ff0000', unselected_alpha=1, unselected_color='#90FF90')\n```", "start_char_idx": 2, "end_char_idx": 782, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1ea96c52-f39b-4aec-9827-7837ec0c25ba": {"__data__": {"id_": "1ea96c52-f39b-4aec-9827-7837ec0c25ba", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4ed417ee-24dc-4f43-9f4b-ddd540aa3c62", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a4ad1134e2c238e84c3fb0c8572983785fffd4633384e274f8b704f5e3b0334d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ca31436c-b4a7-4316-a6d4-97454ec2f601", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1628ed5cb9283be62275a254ffe37c2848ce0d13bc517d82e4018bf7d1a2758e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a0ab8381-a7c1-4ed0-93f2-aecdf45d7f89", "node_type": "1", "metadata": {}, "hash": "6e5d1ae7ad983d4d33fa66d78e6b46bb7134ccd24f81415fdcf0073d5abaf8f1", "class_name": "RelatedNodeInfo"}}, "hash": "146a53ffa50b480798a5bb960c6f1857d2f7418a095dc2795114a05e713cc302", "text": "Plotly support\n\nLinked brushing also works with the Plotly backend, which, unlike Bokeh, has support for rendering 3D plots:\n\n\n```python\nhv.Store.set_current_backend('plotly')\n\nds = hv.Dataset(autompg)\n\nsel = link_selections.instance(\n selected_color='#bf0000', unselected_color='#ff9f9f', unselected_alpha=1\n)\n\nscatter1 = hv.Scatter(ds, 'weight', 'accel')\nscatter2 = hv.Scatter(ds, 'mpg', 'displ')\nscatter3d = hv.Scatter3D(ds, ['mpg', 'hp', 'weight'])\ntable = hv.Table(ds, ['name', 'origin', 'yr'], 'mpg')\n\nsel(scatter1 + scatter2 + scatter3d + table, selection_expr=((dim('origin')==1) & (dim('mpg') >16))).cols(2)\n```\n\n\n```python\nhv.Store.set_current_backend('bokeh')\n```\n\nNote that Plotly does not yet support _selecting_ in 3D, but you should be able to provide 2D views for selecting alongside the 3D plots.", "start_char_idx": 2, "end_char_idx": 818, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a0ab8381-a7c1-4ed0-93f2-aecdf45d7f89": {"__data__": {"id_": "a0ab8381-a7c1-4ed0-93f2-aecdf45d7f89", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "f8601b34-a3f6-4aac-b2b7-bd0e28d39e2e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "aca9b84ba1fb3c417027e3e2d5640670b63a83a2033313a622ab648edd6045fb", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1ea96c52-f39b-4aec-9827-7837ec0c25ba", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "146a53ffa50b480798a5bb960c6f1857d2f7418a095dc2795114a05e713cc302", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "57cf304a-593e-498f-9f01-c78faf276b53", "node_type": "1", "metadata": {}, "hash": "42b4165fbea2d2fedf7176cde56d03d826ea7ec43e14ccf35a3d5120e8e42bc1", "class_name": "RelatedNodeInfo"}}, "hash": "6e5d1ae7ad983d4d33fa66d78e6b46bb7134ccd24f81415fdcf0073d5abaf8f1", "text": "Operations\n\nOne of the major advantages linked selections in HoloViews provide over using plotting libraries directly is the fact that HoloViews keeps track of the full pipeline of operations that have been applied to a dataset, allowing selections to be applied to the original dataset and then replaying the entire processing pipeline.\n\nIn the example below, we'll use an example from Datashader that has a sum of five normal distributions of different widths, each with its own range of values and its own category:\n\n\n```python\nimport datashader as ds\nimport holoviews.operation.datashader as hd\n\nnum = 100000\nnp.random.seed(1)\n\ndists = {\n cat: pd.DataFrame({\n 'x': np.random.normal(x, s, num), \n 'y': np.random.normal(y, s, num), \n 'val': np.random.normal(val, 1.5, num), \n 'cat': cat\n }) for x, y, s, val, cat in \n [( 2, 2, 0.03, 10, \"d1\"), \n ( 2, -2, 0.10, 20, \"d2\"), \n ( -2, -2, 0.50, 30, \"d3\"), \n ( -2, 2, 1.00, 40, \"d4\"), \n ( 0, 0, 3.00, 50, \"d5\")]\n}\n\npoints = hv.Points(pd.concat(dists), ['x', 'y'], ['val', 'cat'])\ndatashaded = hd.datashade(points, aggregator=ds.count_cat('cat'))\nspreaded = hd.dynspread(datashaded, threshold=0.50, how='over')", "start_char_idx": 2, "end_char_idx": 1224, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "57cf304a-593e-498f-9f01-c78faf276b53": {"__data__": {"id_": "57cf304a-593e-498f-9f01-c78faf276b53", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "81d3317f-c85a-4438-870b-7fd6499f20be", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4fff769a6dcbca255ed5248fb3ab14ec0c31c300d2734832e7a57046818695bd", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a0ab8381-a7c1-4ed0-93f2-aecdf45d7f89", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6e5d1ae7ad983d4d33fa66d78e6b46bb7134ccd24f81415fdcf0073d5abaf8f1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2a4885e5-ca23-49a9-b91d-29b043580083", "node_type": "1", "metadata": {}, "hash": "02edab145204508d08bb3ba0aa2af1d77e90796fb01e4132e2dbf7b2ce76ab0b", "class_name": "RelatedNodeInfo"}}, "hash": "42b4165fbea2d2fedf7176cde56d03d826ea7ec43e14ccf35a3d5120e8e42bc1", "text": "Declare dim expression to color by cluster\ndim_expr = ((0.1+hv.dim('val')/10).round()).categorize(hv.Cycle('Set1').values)\nhistogram = points.hist(num_bins=60, adjoin=False, normed=False).opts(color=dim_expr)\n\nlink_selections(spreaded + histogram)\n```\n\nHere you can select a group of points on the datashaded plot (left) and see that the histogram updates to show that subset of points, and similarly you can select one or more groups in the histogram and see that the corresponding group of points is highlighted on the left. (Here we've color-coded the histogram to make it easy to see that relationship, i.e. that the small dot of red points has a `val` around 10, and the large cloud of orange points has a `val` around 50; usually such relationships won't be so easy to see!) Each time you make such a selection on either plot, the entire 2D spatial aggregation pipeline from Datashader is re-run on the first plot and the entire 1D aggregation by value is run on the second plot, allowing you to see how the subset of `x`,`y` and/or `val` values relates to the dataset as a whole. At no point is the actual data (100,000 points here) sent to the browser, but the browser still allows selecting against the original dataset so that all aggregate views of the data accurately reflect the selection.", "start_char_idx": 2, "end_char_idx": 1304, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2a4885e5-ca23-49a9-b91d-29b043580083": {"__data__": {"id_": "2a4885e5-ca23-49a9-b91d-29b043580083", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "71885c22-edfa-4cab-a0b8-8ca79125148b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ad62f57dd64622b8c786efc1dc4505770de341eb0f9ffe922fec25d235c00d23", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "57cf304a-593e-498f-9f01-c78faf276b53", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "42b4165fbea2d2fedf7176cde56d03d826ea7ec43e14ccf35a3d5120e8e42bc1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3972507d-18dc-4150-9a9c-e5ee3a3371f2", "node_type": "1", "metadata": {}, "hash": "b35315e7c881212a00ebf315899806788ee9b7e1cf8dc2dddcc9809e248245e0", "class_name": "RelatedNodeInfo"}}, "hash": "02edab145204508d08bb3ba0aa2af1d77e90796fb01e4132e2dbf7b2ce76ab0b", "text": "Supported elements\n\nNot all elements can be used with the `link_selections` function, and those that do can support either being selected on (for range and/or index selections), displaying selections, or neither. Below we show most elements supporting range-based selections:\n\n\n```python\ncolors = hv.Cycle('Category10').values\n\narea = autompg_ds.aggregate('yr', function=np.mean).to(hv.Area, 'yr', 'weight')\nbivariate = hv.Bivariate(autompg_ds, ['mpg', 'accel'], []).opts(show_legend=False)\nbox_whisker = hv.BoxWhisker(autompg_ds, 'cyl', 'accel').sort()\ncurve = autompg_ds.aggregate('yr', function=np.mean).to(hv.Curve, 'yr', 'mpg')\nspread = autompg_ds.aggregate('yr', function=np.mean, spreadfn=np.std).to(hv.Spread, 'yr', ['mpg', 'mpg_std'])\ndistribution = hv.Distribution(autompg_ds, 'weight')\nimg = hd.rasterize(hv.Points(autompg_ds, ['hp', 'displ']), dynamic=False, width=20, height=20)\nheatmap = hv.HeatMap(autompg_ds, ['yr', 'origin'], 'accel').aggregate(function=np.mean)\nhextiles = hv.HexTiles(autompg_ds, ['weight', 'displ'], []).opts(gridsize=20)\nhist = autompg_ds.hist('displ', adjoin=False, normed=False)\nscatter = hv.Scatter(autompg_ds, 'mpg', 'hp')\nviolin = hv.Violin(autompg_ds, 'origin', 'mpg').sort()\n\nlink_selections(\n area + bivariate + box_whisker + curve +\n distribution + heatmap + hextiles + hist +\n img + scatter + spread + violin\n).opts(\n opts.Area(color=colors[0]),\n opts.Bivariate(cmap='Blues'),\n opts.BoxWhisker(box_color=colors[1]),\n opts.Curve(color=colors[2]),\n opts.Distribution(color=colors[3]),\n opts.HexTiles(cmap='Purples'),\n opts.HeatMap(cmap='Greens'),\n opts.Histogram(color=colors[4]),\n opts.Image(cmap='Reds'),\n opts.Scatter(color=colors[5]),\n opts.Spread(color=colors[6]),\n opts.Violin(violin_fill_color=colors[7]),\n)\n```\n\nThe table below can be used for reference to see which elements support displaying selections, making index-based selections, and making range-based selections. Elements that do not support selection are not listed in the table at all, including **Div**, **ItemTable**, and **Tiles** along with Annotations (**Arrow**, **Bounds**, **Box**, **Ellipse**, **HLine**, **HSpan**, **Slope**, **Spline**, **Text**, **VLine**, **VSpan**). Notes are provided for some elements that _could_ be supported, but are not yet supported due to various complications as listed.\n\n.arbit .trary a { color: inherit; }.arbit .trary\n.sL{text-align:center;padding:2px 2px 2px 2px;background-color:#ffffff;font-weight:bold;width:60px}.arbit .trary\n.sG{text-align:center;padding:2px 2px 2px 2px;background-color:#ffffff;font-weight:bold}.arbit .trary\n.sY{text-align:center;padding:2px 2px 2px 2px;background-color:#b7e1cd;}.arbit .trary \n.sN{text-align:center;padding:2px 2px 2px 2px;background-color:#f4c7c3;}.arbit .trary\n.sM{text-align:center;padding:2px 2px 2px 2px;background-color:#fce8b2;}.arbit .trary\n\n\n\n\n\nElement\nDisplay selections\nIndex-based selections\nRange-based selections\nLasso-based selections\nNotes", "start_char_idx": 2, "end_char_idx": 3065, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3972507d-18dc-4150-9a9c-e5ee3a3371f2": {"__data__": {"id_": "3972507d-18dc-4150-9a9c-e5ee3a3371f2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "71885c22-edfa-4cab-a0b8-8ca79125148b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ad62f57dd64622b8c786efc1dc4505770de341eb0f9ffe922fec25d235c00d23", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2a4885e5-ca23-49a9-b91d-29b043580083", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "02edab145204508d08bb3ba0aa2af1d77e90796fb01e4132e2dbf7b2ce76ab0b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c2c8e238-3506-473d-ab04-a931d1372fac", "node_type": "1", "metadata": {}, "hash": "1050552ee41f542c5b97c0973cb193562586d5548d6d4d566e3ab3e32e703a93", "class_name": "RelatedNodeInfo"}}, "hash": "b35315e7c881212a00ebf315899806788ee9b7e1cf8dc2dddcc9809e248245e0", "text": "Element\nDisplay selections\nIndex-based selections\nRange-based selections\nLasso-based selections\nNotes\n\n\n\nAreaYesYesYes\n No \nBarsNo No No \n No Complicated to support stacked and multi-level bars\nBivariateYesYesYes\n Yes \nBoxWhiskerYesYesYes\n No \nChordNo No No \n No Complicated to support composite elements\nContoursYesYesNo \n Yes \nCurveYesYesYes\n No \nDistributionYesYesYes\n No \nErrorBarsYesNo No \n No \nGraphNo No No \n Yes Complicated to support composite elements\nHeatMapYesYesYes\n Yes \nHexTilesYesYesYes\n Yes \nHistogramYesYesYes\n No \nHSVYesYesYes\n Yes \nImageYesYesYes\n Yes \nLabelsYesNo No \n Yes \nPath3DNo No No \n No Complicated to support masking partial paths; no 3D selections\nPathNo No No \n No Complicated to support masking partial paths\nPointsYesYesYes\n Yes \nPolygonsYesYesNo \n Yes \nQuadMeshYesYesYes\n Yes \nRadialHeatMapYesNo No \n No \nRasterNo No No \n No Special-case code that is difficult to replace\nRectanglesYesYesYes\n Yes \nRGBYesYesYes\n Yes \nSankeyNo No No \n No Complicated to support composite elements\nScatterYesYesYes\n Yes \nScatter3DYesNo No \n No 3D selections not yet available\nSegmentsYesYesYes\n Yes \nSpikesYesYesYes\n No \nSpreadYesYesYes\n No \nSurfaceYesNo No \n No 3D selections not yet available\nTableYesYesNo \n No \nTriMeshNo No No \n No Complicated to support composite elements\nTriSurfaceYesNo No \n No 3D selections not yet available\nVectorFieldYesYesYes\n Yes \nViolinYesYesYes\n No", "start_char_idx": 2964, "end_char_idx": 4470, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c2c8e238-3506-473d-ab04-a931d1372fac": {"__data__": {"id_": "c2c8e238-3506-473d-ab04-a931d1372fac", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d8a8e289-624d-40ed-ad2e-2f21a7800aab", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3b76f838a0e59d81e376cfdb3dc04748e1db39c7cf34256b64e9433006ffea25", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3972507d-18dc-4150-9a9c-e5ee3a3371f2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b35315e7c881212a00ebf315899806788ee9b7e1cf8dc2dddcc9809e248245e0", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bf10d376-9992-479a-8f68-43e6dfea5814", "node_type": "1", "metadata": {}, "hash": "c033fb34dfdbf5622e18538217c869bdf835073e39c1dc8fca12eaf5aaf13992", "class_name": "RelatedNodeInfo"}}, "hash": "1050552ee41f542c5b97c0973cb193562586d5548d6d4d566e3ab3e32e703a93", "text": "What is a ``Link``?\n\nA ``Link`` defines some connection between a source and target object in their visualization. It is quite similar to a ``Stream`` as it allows defining callbacks in response to some change or event on the source object, however, unlike a Stream, it does not transfer data between the browser and a Python process. Instead a ``Link`` directly causes some action to occur on the ``target``, for JS based backends this usually means that a corresponding JS callback will effect some change on the target in response to a change on the source.\n\nOne of the simplest examples of a ``Link`` is the ``DataLink`` which links the data from two sources as long as they match in length, e.g. below we create two elements with data of the same length. By declaring a ``DataLink`` between the two we can ensure they are linked and can be selected together:\n\n\n```python\nfrom holoviews.plotting.links import DataLink\n\nscatter1 = hv.Scatter(np.arange(100))\nscatter2 = hv.Scatter(np.arange(100)[::-1], 'x2', 'y2')\n\ndlink = DataLink(scatter1, scatter2)\n\n(scatter1 + scatter2).opts(\n opts.Scatter(tools=['box_select', 'lasso_select']))\n```\n\nIf we want to display the elements subsequently without linking them we can call the ``unlink`` method:\n\n\n```python\ndlink.unlink()\n\n(scatter1 + scatter2)\n```\n\nAnother example of a link is the ``RangeToolLink`` which adds a RangeTool to the ``source`` plot which is linked to the axis range on the ``target`` plot. In this way the source plot can be used as an overview of the full data while the target plot provides a more detailed view of a subset of the data:\n\n\n```python\nfrom holoviews.plotting.links import RangeToolLink\n\ndata = np.random.randn(1000).cumsum()\n\nsource = hv.Curve(data).opts(width=800, height=125, axiswise=True, default_tools=[])\ntarget = hv.Curve(data).opts(width=800, labelled=['y'], toolbar=None)\n\nrtlink = RangeToolLink(source, target)\n\n(target + source).opts(merge_tools=False).cols(1)\n```", "start_char_idx": 2, "end_char_idx": 1962, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bf10d376-9992-479a-8f68-43e6dfea5814": {"__data__": {"id_": "bf10d376-9992-479a-8f68-43e6dfea5814", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8e48d117-71ed-491a-9987-271177f52f8c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ac2e1b6ce48d5a8bec1aac243e0a3a20364301454a6425808a64e4dbb131163e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c2c8e238-3506-473d-ab04-a931d1372fac", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1050552ee41f542c5b97c0973cb193562586d5548d6d4d566e3ab3e32e703a93", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ee11557b-001f-4916-9c66-b76ef1fe64c4", "node_type": "1", "metadata": {}, "hash": "c37e271dce3784b3b0257a59c92add11f07c0217319b557d82ec566f644aa094", "class_name": "RelatedNodeInfo"}}, "hash": "c033fb34dfdbf5622e18538217c869bdf835073e39c1dc8fca12eaf5aaf13992", "text": "Advanced: Writing a ``Link``\n\nA ``Link`` consists of two components the ``Link`` itself and a ``LinkCallback`` which provides the actual implementation behind the ``Link``. In order to demonstrate writing a ``Link`` we'll start with a fairly straightforward example, linking an ``HLine`` or ``VLine`` to the mean value of a selection on a ``Scatter`` element. To express this we declare a ``MeanLineLink`` class subclassing from the ``Link`` baseclass and declare ``ClassSelector`` parameters for the ``source`` and ``target`` with the appropriate types to perform some basic validation. Additionally we declare a ``column`` parameter to specify which column to compute the mean on.\n\n\n```python\nimport param\nfrom holoviews.plotting.links import Link\n\nclass MeanLineLink(Link):\n \n column = param.String(default='x', doc=\"\"\"\n The column to compute the mean on.\"\"\")\n \n _requires_target = True\n```\n\nNow we have the ``Link`` class we need to write the implementation in the form of a ``LinkCallback``, which in the case of bokeh will be translated into a ``CustomJS`` callback. A ``LinkCallback`` should declare the ``source_model`` we want to listen to events on and a ``target_model``, declaring which model should be altered in response. To find out which models we can attach the ``Link`` to we can create a ``Plot`` instance and look at the ``plot.handles``, e.g. here we create a ``ScatterPlot`` and can see it has a 'cds', which represents the ``ColumnDataSource``.\n\n\n```python\nrenderer = hv.renderer('bokeh')\n\nplot = renderer.get_plot(hv.Scatter([]))\n\nplot.handles.keys()\n```\n\nIn this case we are interested in the 'cds' handle, but we still have to tell it which events should trigger the callback. Bokeh callbacks can be grouped into two types, model property changes and events. For more detail on these two types of callbacks see the Bokeh user guide.\n\nFor this example we want to respond to changes to the ``ColumnDataSource.selected`` property. We can declare this in the ``on_source_changes`` class attribute on our callback. So now that we have declared which model we want to listen to events on and which events we want to listen to, we have to declare the model on the target we want to change in response. \n\nWe can once again look at the handles on the plot corresponding to the ``HLine`` element:\n\n\n```python\nplot = renderer.get_plot(hv.HLine(0))\nplot.handles.keys()\n```\n\nWe now want to change the ``glyph``, which defines the position of the ``HLine``, so we declare the ``target_model`` as ``'glyph'``. Having defined both the source and target model and the events we can finally start writing the JS callback that should be triggered. To declare it we simply define the ``source_code`` class attribute. To understand how to write this code we need to understand how the source and target models, we have declared, can be referenced from within the callback.\n\nThe ``source_model`` will be made available by prefixing it with ``source_``, while the target model is made available with the prefix ``target_``. This means that the ``ColumnDataSource`` on the ``source`` can be referenced as ``source_source``, while the glyph on the target can be referenced as ``target_glyph``.\n\nFinally, any parameters other than the ``source`` and ``target`` on the ``Link`` will also be made available inside the callback, which means we can reference the appropriate ``column`` in the ``ColumnDataSource`` to compute the mean value along a particular axis.\n\nOnce we know how to reference the bokeh models and ``Link`` parameters we can access their properties to compute the mean value of the current selection on the source ``ColumnDataSource`` and set the ``target_glyph.position`` to that value.\n\nA ``LinkCallback`` may also define a validate method to validate that the Link parameters and plots are compatible, e.g. in this case we can validate that the ``column`` is actually present in the source_plot ``ColumnDataSource``.", "start_char_idx": 2, "end_char_idx": 3955, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ee11557b-001f-4916-9c66-b76ef1fe64c4": {"__data__": {"id_": "ee11557b-001f-4916-9c66-b76ef1fe64c4", "embedding": null, "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8e48d117-71ed-491a-9987-271177f52f8c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ac2e1b6ce48d5a8bec1aac243e0a3a20364301454a6425808a64e4dbb131163e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bf10d376-9992-479a-8f68-43e6dfea5814", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c033fb34dfdbf5622e18538217c869bdf835073e39c1dc8fca12eaf5aaf13992", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "99cf0334-81f8-4cb9-b9c4-b529b19753ff", "node_type": "1", "metadata": {}, "hash": "3e7d4d0f4d6e84971d7793a35615a1bc00b79475ee4b2154b5c2203e4e5f2864", "class_name": "RelatedNodeInfo"}}, "hash": "c37e271dce3784b3b0257a59c92add11f07c0217319b557d82ec566f644aa094", "text": "```python\nfrom holoviews.plotting.bokeh import LinkCallback\n\nclass MeanLineCallback(LinkCallback):\n\n source_model = 'selected'\n source_handles = ['cds']\n on_source_changes = ['indices']\n\n target_model = 'glyph'\n \n source_code = \"\"\"\n var inds = source_selected.indices\n var d = source_cds.data\n var vm = 0\n if (inds.length == 0)\n return\n for (var i = 0; i < inds.length; i++)\n vm += d[column][inds[i]]\n vm /= inds.length\n target_glyph.location = vm\n \"\"\"\n \n def validate(self):\n assert self.link.column in self.source_plot.handles['cds'].data\n```\n\nFinally we need to register the ``MeanLineLinkCallback`` with the ``MeanLineLink`` using the ``register_callback`` classmethod:\n\n\n```python\nMeanLineLink.register_callback('bokeh', MeanLineCallback)\n```\n\nNow the newly declared Link is ready to use, we'll create a ``Scatter`` element along with an ``HLine`` and ``VLine`` element and link each one:\n\n\n```python\noptions = opts.Scatter(\n selection_fill_color='firebrick', alpha=0.4, line_color='black', size=8,\n tools=['lasso_select', 'box_select'], width=500, height=500,\n active_tools=['lasso_select']\n)\nscatter = hv.Scatter(np.random.randn(500, 2)).opts(options)\nvline = hv.VLine(scatter['x'].mean()).opts(color='black')\nhline = hv.HLine(scatter['y'].mean()).opts(color='black')\n\nMeanLineLink(scatter, vline, column='x')\nMeanLineLink(scatter, hline, column='y')\n\nscatter * hline * vline\n```\n\nUsing the 'box_select' and 'lasso_select' tools will now update the position of the HLine and VLine.", "start_char_idx": 3958, "end_char_idx": 5560, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "99cf0334-81f8-4cb9-b9c4-b529b19753ff": {"__data__": {"id_": "99cf0334-81f8-4cb9-b9c4-b529b19753ff", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5a9f3b43-5472-4a23-9b0a-865bbc49e593", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "50a7a107dddfa3af40b6eff5538c3295cdd0643a8c43d7a56549d12ef0171d4e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ee11557b-001f-4916-9c66-b76ef1fe64c4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c37e271dce3784b3b0257a59c92add11f07c0217319b557d82ec566f644aa094", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5baf8a14-3689-44b0-97fb-e351db6138dc", "node_type": "1", "metadata": {}, "hash": "6b5d3764adcf608082b18d63796c60c11c4a77643b9747cacbb7e5777f9061a6", "class_name": "RelatedNodeInfo"}}, "hash": "3e7d4d0f4d6e84971d7793a35615a1bc00b79475ee4b2154b5c2203e4e5f2864", "text": "A simple Graph\n\nLet's start by declaring a very simple graph connecting one node to all others. If we simply supply the abstract connectivity of the ``Graph``, it will automatically compute a layout for the nodes using the ``layout_nodes`` operation, which defaults to a circular layout:\n\n\n```python", "start_char_idx": 2, "end_char_idx": 301, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5baf8a14-3689-44b0-97fb-e351db6138dc": {"__data__": {"id_": "5baf8a14-3689-44b0-97fb-e351db6138dc", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a32df565-ff56-472b-b469-3a66cf2346e7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7c42c9bf37d0ddc208fd055fdfa314d044d6110d4f8d0dd0e223153da84cf587", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "99cf0334-81f8-4cb9-b9c4-b529b19753ff", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3e7d4d0f4d6e84971d7793a35615a1bc00b79475ee4b2154b5c2203e4e5f2864", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "74425403-5af4-419c-bf6e-f872b166affa", "node_type": "1", "metadata": {}, "hash": "a84345016a179e1e066a1a32777e167a35291374ad7067d27cb2baa79bc10898", "class_name": "RelatedNodeInfo"}}, "hash": "6b5d3764adcf608082b18d63796c60c11c4a77643b9747cacbb7e5777f9061a6", "text": "Declare abstract edges\nN = 8\nnode_indices = np.arange(N, dtype=np.int32)\nsource = np.zeros(N, dtype=np.int32)\ntarget = node_indices\n\n\nsimple_graph = hv.Graph(((source, target),))\nsimple_graph\n```", "start_char_idx": 2, "end_char_idx": 197, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "74425403-5af4-419c-bf6e-f872b166affa": {"__data__": {"id_": "74425403-5af4-419c-bf6e-f872b166affa", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "49b3803d-41d4-4a6a-ae18-6123bae2d7c1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "62181cd7b78e10db72df69b34caef4d1b9303b612744df94810434745d6326da", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5baf8a14-3689-44b0-97fb-e351db6138dc", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6b5d3764adcf608082b18d63796c60c11c4a77643b9747cacbb7e5777f9061a6", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d19dd865-befb-44cb-a692-4f2f521826ab", "node_type": "1", "metadata": {}, "hash": "123a6ac548ced255120a76541cdcf152a23e3f875e78d856cb33ca91c3590d9a", "class_name": "RelatedNodeInfo"}}, "hash": "a84345016a179e1e066a1a32777e167a35291374ad7067d27cb2baa79bc10898", "text": "Accessing the nodes and edges\n\nWe can easily access the ``Nodes`` and ``EdgePaths`` on the ``Graph`` element using the corresponding properties:\n\n\n```python\nsimple_graph.nodes + simple_graph.edgepaths\n```", "start_char_idx": 2, "end_char_idx": 206, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d19dd865-befb-44cb-a692-4f2f521826ab": {"__data__": {"id_": "d19dd865-befb-44cb-a692-4f2f521826ab", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ceff711f-6c7e-4eaa-b6ca-a819d9d42274", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "01e2c60903b31230ebeaec1527b40eaf18c24a9c3f2e18b990ac3bcfce5356e2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "74425403-5af4-419c-bf6e-f872b166affa", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a84345016a179e1e066a1a32777e167a35291374ad7067d27cb2baa79bc10898", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "2a8d9a09-2287-4ee3-97c9-69b78bcc0c73", "node_type": "1", "metadata": {}, "hash": "7e197836075c2698b7d2296539029d8ba62f7b1ede11aa667519770d1b1c64c5", "class_name": "RelatedNodeInfo"}}, "hash": "123a6ac548ced255120a76541cdcf152a23e3f875e78d856cb33ca91c3590d9a", "text": "Displaying directed graphs\n\nWhen specifying the graph edges the source and target node are listed in order, if the graph is actually a directed graph this may used to indicate the directionality of the graph. By setting ``directed=True`` as a plot option it is possible to indicate the directionality of each edge using an arrow:\n\n\n```python\nsimple_graph.relabel('Directed Graph').opts(directed=True, node_size=5, arrowhead_length=0.05)\n```\n\nThe length of the arrows can be set as an fraction of the overall graph extent using the ``arrowhead_length`` option.", "start_char_idx": 2, "end_char_idx": 561, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "2a8d9a09-2287-4ee3-97c9-69b78bcc0c73": {"__data__": {"id_": "2a8d9a09-2287-4ee3-97c9-69b78bcc0c73", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8b8fab11-bb3d-4846-b0d5-df95bbf64188", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c0e4392723e39b4690059b981e0819a318647db772de27317c1236d83f54d3ce", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d19dd865-befb-44cb-a692-4f2f521826ab", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "123a6ac548ced255120a76541cdcf152a23e3f875e78d856cb33ca91c3590d9a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d50b434a-b14c-4d7b-ab06-a817945c2e2a", "node_type": "1", "metadata": {}, "hash": "2418ee4aad17b6be727b47ebb590527f038f1ee366a9f6d94ed30689d8a4602f", "class_name": "RelatedNodeInfo"}}, "hash": "7e197836075c2698b7d2296539029d8ba62f7b1ede11aa667519770d1b1c64c5", "text": "Supplying explicit paths\n\nNext we will extend this example by supplying explicit edges:\n\n\n```python\ndef bezier(start, end, control, steps=np.linspace(0, 1, 100)):\n return (1-steps)**2*start + 2*(1-steps)*steps*control+steps**2*end\n\nx, y = simple_graph.nodes.array([0, 1]).T\n\npaths = []\nfor node_index in node_indices:\n ex, ey = x[node_index], y[node_index]\n paths.append(np.column_stack([bezier(x[0], ex, 0), bezier(y[0], ey, 0)]))\n \nbezier_graph = hv.Graph(((source, target), (x, y, node_indices), paths))\nbezier_graph\n```", "start_char_idx": 2, "end_char_idx": 537, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d50b434a-b14c-4d7b-ab06-a817945c2e2a": {"__data__": {"id_": "d50b434a-b14c-4d7b-ab06-a817945c2e2a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3a37a87e-e2a6-4e52-bfae-fad329b62253", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7b85856f8a9f783e086f163694c56c92be1a8ff83ed666d09dd02faa335646a9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "2a8d9a09-2287-4ee3-97c9-69b78bcc0c73", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7e197836075c2698b7d2296539029d8ba62f7b1ede11aa667519770d1b1c64c5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0ccf524a-ada1-40b0-9c60-5a9dd9ca0c99", "node_type": "1", "metadata": {}, "hash": "0528b977dff9ca5b93f9855ca36293745a2864cbf75525458b36dd57235c3cac", "class_name": "RelatedNodeInfo"}}, "hash": "2418ee4aad17b6be727b47ebb590527f038f1ee366a9f6d94ed30689d8a4602f", "text": "Interactive features", "start_char_idx": 2, "end_char_idx": 22, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0ccf524a-ada1-40b0-9c60-5a9dd9ca0c99": {"__data__": {"id_": "0ccf524a-ada1-40b0-9c60-5a9dd9ca0c99", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fd7a66a7-b736-4c0c-96fc-8fcb3f4e8daa", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "855cda693266fe50860395eb07a741cddf7563cda613c9a2efa3e1f4df9f2b3e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d50b434a-b14c-4d7b-ab06-a817945c2e2a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2418ee4aad17b6be727b47ebb590527f038f1ee366a9f6d94ed30689d8a4602f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "28c98e71-8f78-4ac2-adfe-2c73c26a142c", "node_type": "1", "metadata": {}, "hash": "410b6f9a61dbad18bb09615b45a4ae1905bf18c6495e80d3dd4e304130e8d888", "class_name": "RelatedNodeInfo"}}, "hash": "0528b977dff9ca5b93f9855ca36293745a2864cbf75525458b36dd57235c3cac", "text": "Hover and selection policies\n\nThanks to Bokeh we can reveal more about the graph by hovering over the nodes and edges. The ``Graph`` element provides an ``inspection_policy`` and a ``selection_policy``, which define whether hovering and selection highlight edges associated with the selected node or nodes associated with the selected edge, these policies can be toggled by setting the policy to ``'nodes'`` (the default) and ``'edges'``.\n\n\n```python\nbezier_graph.relabel('Edge Inspection').opts(inspection_policy='edges')\n```\n\nIn addition to changing the policy we can also change the colors used when hovering and selecting nodes:\n\n\n```python\nbezier_graph.opts(\n opts.Graph(inspection_policy='nodes', tools=['hover', 'box_select'],\n edge_hover_line_color='green', node_hover_fill_color='red'))\n```", "start_char_idx": 2, "end_char_idx": 818, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "28c98e71-8f78-4ac2-adfe-2c73c26a142c": {"__data__": {"id_": "28c98e71-8f78-4ac2-adfe-2c73c26a142c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a1cc418a-9dec-4010-af6d-682770c36972", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d07cfe19d6464c799b89047c3a89b69bf1c9ab259f9ce16cebea3cae89f585e9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0ccf524a-ada1-40b0-9c60-5a9dd9ca0c99", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0528b977dff9ca5b93f9855ca36293745a2864cbf75525458b36dd57235c3cac", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a51314b8-f718-4c37-9ee0-71025ebb01f4", "node_type": "1", "metadata": {}, "hash": "aa6efadcc5ca39485734b703c960475618b1f73cac932d1557afa56287da25db", "class_name": "RelatedNodeInfo"}}, "hash": "410b6f9a61dbad18bb09615b45a4ae1905bf18c6495e80d3dd4e304130e8d888", "text": "Additional information\n\nWe can also associate additional information with the nodes and edges of a graph. By constructing the ``Nodes`` explicitly we can declare additional value dimensions, which are revealed when hovering and/or can be mapped to the color by setting the ``color`` to the dimension name ('Weight'). We can also associate additional information with each edge by supplying a value dimension to the ``Graph`` itself, which we can map to various style options, e.g. by setting the ``edge_color`` and ``edge_line_width``.\n\n\n```python\nnode_labels = ['Output']+['Input']*(N-1)\nnp.random.seed(7)\nedge_labels = np.random.rand(8)\n\nnodes = hv.Nodes((x, y, node_indices, node_labels), vdims='Type')\ngraph = hv.Graph(((source, target, edge_labels), nodes, paths), vdims='Weight')\n\n(graph + graph.opts(inspection_policy='edges', clone=True)).opts(\n opts.Graph(node_color='Type', edge_color='Weight', cmap='Set1',\n edge_cmap='viridis', edge_line_width=hv.dim('Weight')*10))\n```\n\nIf you want to supply additional node information without specifying explicit node positions you may pass in a ``Dataset`` object consisting of various value dimensions.\n\n\n```python\nnode_info = hv.Dataset(node_labels, vdims='Label')\nhv.Graph(((source, target), node_info)).opts(node_color='Label', cmap='Set1')\n```", "start_char_idx": 2, "end_char_idx": 1316, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a51314b8-f718-4c37-9ee0-71025ebb01f4": {"__data__": {"id_": "a51314b8-f718-4c37-9ee0-71025ebb01f4", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fccb57dc-9085-4279-a6f6-fc4bc935357e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "31de11635c7d6f77443bf0aa7906db12dc297d5fa2cda7ed9c0cd661c5d7e689", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "28c98e71-8f78-4ac2-adfe-2c73c26a142c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "410b6f9a61dbad18bb09615b45a4ae1905bf18c6495e80d3dd4e304130e8d888", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "740cbbb1-7130-459b-aa8e-62b6eb2db6b5", "node_type": "1", "metadata": {}, "hash": "5a680c9e962feee92ade1777ae4b4f76554e4972e3172357e604dada57727664", "class_name": "RelatedNodeInfo"}}, "hash": "aa6efadcc5ca39485734b703c960475618b1f73cac932d1557afa56287da25db", "text": "Working with NetworkX\n\nNetworkX is a very useful library when working with network graphs and the Graph Element provides ways of importing a NetworkX Graph directly. Here we will load the Karate Club graph and use the ``circular_layout`` function provided by NetworkX to lay it out:\n\n\n```python\nG = nx.karate_club_graph()\nhv.Graph.from_networkx(G, nx.layout.circular_layout).opts(tools=['hover'])\n```\n\nIt is also possible to pass arguments to the NetworkX layout function as keywords to ``hv.Graph.from_networkx``, e.g. we can override the k-value of the Fruchteran Reingold layout\n\n\n```python\nhv.Graph.from_networkx(G, nx.layout.fruchterman_reingold_layout, k=1)\n```\n\nFinally if we want to layout a Graph after it has already been constructed, the ``layout_nodes`` operation may be used, which also allows applying the ``weight`` argument to graphs which have not been constructed with networkx:\n\n\n```python\nfrom holoviews.element.graphs import layout_nodes\n\ngraph = hv.Graph([\n ('a', 'b', 3),\n ('a', 'c', 0.2),\n ('c', 'd', 0.1),\n ('c', 'e', 0.7),\n ('c', 'f', 5),\n ('a', 'd', 0.3)\n], vdims='weight')\n\nlayout_nodes(graph, layout=nx.layout.fruchterman_reingold_layout, kwargs={'weight': 'weight'})\n```", "start_char_idx": 2, "end_char_idx": 1220, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "740cbbb1-7130-459b-aa8e-62b6eb2db6b5": {"__data__": {"id_": "740cbbb1-7130-459b-aa8e-62b6eb2db6b5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "069d7ba2-5195-4fcf-b1d8-4ca6a67dc6be", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3331991980de8e1643c030d4e177f2db0d82d5e1cf476829414f01ce2955601a", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a51314b8-f718-4c37-9ee0-71025ebb01f4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "aa6efadcc5ca39485734b703c960475618b1f73cac932d1557afa56287da25db", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d2a6a890-fb12-4da5-b869-ab00dd5ce46c", "node_type": "1", "metadata": {}, "hash": "d576561da021511dd94c618c35934fab3e6f6779dad19bfb80eb2263d9c1099a", "class_name": "RelatedNodeInfo"}}, "hash": "5a680c9e962feee92ade1777ae4b4f76554e4972e3172357e604dada57727664", "text": "Adding labels\n\nIf the ``Graph`` we have constructed has additional metadata we can easily use those as labels, we simply get a handle on the nodes, cast them to hv.Labels and then overlay them:\n\n\n```python\ngraph = hv.Graph.from_networkx(G, nx.layout.fruchterman_reingold_layout)\nlabels = hv.Labels(graph.nodes, ['x', 'y'], 'club')\n\n(graph * labels.opts(text_font_size='8pt', text_color='white', bgcolor='gray'))\n```", "start_char_idx": 2, "end_char_idx": 417, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d2a6a890-fb12-4da5-b869-ab00dd5ce46c": {"__data__": {"id_": "d2a6a890-fb12-4da5-b869-ab00dd5ce46c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d38fe9e3-d538-44a8-9999-16d53fe55bba", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "01c7b9af98e71d48ebf7acc13ad06e02c8f45d851f67ac77e5413c84ff8452e2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "740cbbb1-7130-459b-aa8e-62b6eb2db6b5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5a680c9e962feee92ade1777ae4b4f76554e4972e3172357e604dada57727664", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "359467a1-3a6a-4e06-99ac-9d1bd434e81b", "node_type": "1", "metadata": {}, "hash": "51d70d5ee00316a306bdce185be502462a42ad103ee3919591b0108c18ae6f42", "class_name": "RelatedNodeInfo"}}, "hash": "d576561da021511dd94c618c35934fab3e6f6779dad19bfb80eb2263d9c1099a", "text": "Animating graphs\n\nLike all other elements ``Graph`` can be updated in a ``HoloMap`` or ``DynamicMap``. Here we animate how the Fruchterman-Reingold force-directed algorithm lays out the nodes in real time.\n\n\n```python\nhv.HoloMap({i: hv.Graph.from_networkx(G, nx.spring_layout, iterations=i, seed=10) for i in range(5, 30, 5)},\n kdims='Iterations')\n```", "start_char_idx": 2, "end_char_idx": 363, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "359467a1-3a6a-4e06-99ac-9d1bd434e81b": {"__data__": {"id_": "359467a1-3a6a-4e06-99ac-9d1bd434e81b", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "34a461ca-98da-4bea-8f7f-b698d088db92", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ffee0351f9ad1a71448cc05f4d616d6cf09adca9e69f7321ce5ab66ced058112", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d2a6a890-fb12-4da5-b869-ab00dd5ce46c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d576561da021511dd94c618c35934fab3e6f6779dad19bfb80eb2263d9c1099a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "483909a3-d49b-4774-ba88-bf15adccc8a8", "node_type": "1", "metadata": {}, "hash": "8ef54353cd4bfea9b35409dd4449b5071500ff0a7ad2542aceafa95f8bcf498d", "class_name": "RelatedNodeInfo"}}, "hash": "51d70d5ee00316a306bdce185be502462a42ad103ee3919591b0108c18ae6f42", "text": "Real world graphs\n\nAs a final example let's look at a slightly larger graph. We will load a dataset of a Facebook network consisting a number of friendship groups identified by their ``'circle'``. We will load the edge and node data using pandas and then color each node by their friendship group using many of the things we learned above.\n\n\n```python\nkwargs = dict(width=800, height=800, xaxis=None, yaxis=None)\nopts.defaults(opts.Nodes(**kwargs), opts.Graph(**kwargs))\n\ncolors = ['#000000']+hv.Cycle('Category20').values\nedges_df = pd.read_csv('../assets/fb_edges.csv')\nfb_nodes = hv.Nodes(pd.read_csv('../assets/fb_nodes.csv')).sort()\nfb_graph = hv.Graph((edges_df, fb_nodes), label='Facebook Circles')\n\nfb_graph.opts(cmap=colors, node_size=10, edge_line_width=1,\n node_line_color='gray', node_color='circle')\n```", "start_char_idx": 2, "end_char_idx": 831, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "483909a3-d49b-4774-ba88-bf15adccc8a8": {"__data__": {"id_": "483909a3-d49b-4774-ba88-bf15adccc8a8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "dd9dea52-6cd7-4317-8b98-e66d85735fb3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fd152f131ddaf7c1a525e658514d13f0f6652608bc6aef33673c83d2f2cc6d33", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "359467a1-3a6a-4e06-99ac-9d1bd434e81b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "51d70d5ee00316a306bdce185be502462a42ad103ee3919591b0108c18ae6f42", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a733b2cd-a4cf-4f6a-abbb-677bb60dce07", "node_type": "1", "metadata": {}, "hash": "65f5e18b8cb1c79978d132387c644b56d5e9de249b552466129a95eeb5ff6112", "class_name": "RelatedNodeInfo"}}, "hash": "8ef54353cd4bfea9b35409dd4449b5071500ff0a7ad2542aceafa95f8bcf498d", "text": "Bundling graphs\n\nThe datashader library provides algorithms for bundling the edges of a graph and HoloViews provides convenient wrappers around the libraries. Note that these operations need ``scikit-image`` which you can install using:\n\n```\nconda install scikit-image\n```\n\nor\n\n```\npip install scikit-image\n```\n\n\n```python\nfrom holoviews.operation.datashader import datashade, bundle_graph\nbundled = bundle_graph(fb_graph)\nbundled\n```", "start_char_idx": 2, "end_char_idx": 436, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a733b2cd-a4cf-4f6a-abbb-677bb60dce07": {"__data__": {"id_": "a733b2cd-a4cf-4f6a-abbb-677bb60dce07", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b17daa08-698e-4c9f-98f8-d0bafa4a7a25", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "543d431fa6dca3380ecff0f2119c621c52ec37b061422adc026280f27342dced", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "483909a3-d49b-4774-ba88-bf15adccc8a8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8ef54353cd4bfea9b35409dd4449b5071500ff0a7ad2542aceafa95f8bcf498d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "53679a8b-9da4-4388-8008-c91d62d019db", "node_type": "1", "metadata": {}, "hash": "70a2b5d20865a7a98bed71b32e81d1e8b4625a87b94e21a9360bc0af9a675718", "class_name": "RelatedNodeInfo"}}, "hash": "65f5e18b8cb1c79978d132387c644b56d5e9de249b552466129a95eeb5ff6112", "text": "Datashading graphs\n\nFor graphs with a large number of edges we can datashade the paths and display the nodes separately. This loses some of the interactive features but will let you visualize quite large graphs:\n\n\n```python\n(datashade(bundled, normalization='linear', width=800, height=800) * bundled.nodes).opts(\n opts.Nodes(color='circle', size=10, width=1000, cmap=colors, legend_position='right'))\n```", "start_char_idx": 2, "end_char_idx": 410, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "53679a8b-9da4-4388-8008-c91d62d019db": {"__data__": {"id_": "53679a8b-9da4-4388-8008-c91d62d019db", "embedding": null, "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "84ad9b7c-062b-4ad8-bacb-2d06649e5c43", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a961755eb43b529c912c3fe7d23263b72dda8c7e496a881ade3dec6aea8e8a4e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a733b2cd-a4cf-4f6a-abbb-677bb60dce07", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "65f5e18b8cb1c79978d132387c644b56d5e9de249b552466129a95eeb5ff6112", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "75dde58b-f15f-43c7-bee9-bcd8ece76e20", "node_type": "1", "metadata": {}, "hash": "f2d63cce9c3d18199c2da154d9cced17cb645722330b1a64fdd39fc5589f6483", "class_name": "RelatedNodeInfo"}}, "hash": "70a2b5d20865a7a98bed71b32e81d1e8b4625a87b94e21a9360bc0af9a675718", "text": "Applying selections\n\nAlternatively we can select the nodes and edges by an attribute that resides on either. In this case we will select the nodes and edges for a particular circle and then overlay just the selected part of the graph on the datashaded plot. Note that selections on the ``Graph`` itself will select all nodes that connect to one of the selected nodes. In this way a smaller subgraph can be highlighted and the larger graph can be datashaded.\n\n\n```python\ndatashade(bundle_graph(fb_graph), normalization='linear', width=800, height=800) *\\\nbundled.select(circle='circle15').opts(node_fill_color='white')\n```\n\nTo select just nodes that are in 'circle15' set the ``selection_mode='nodes'`` overriding the default of 'edges':\n\n\n```python\nbundled.select(circle='circle15', selection_mode='nodes')\n```", "start_char_idx": 2, "end_char_idx": 812, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "75dde58b-f15f-43c7-bee9-bcd8ece76e20": {"__data__": {"id_": "75dde58b-f15f-43c7-bee9-bcd8ece76e20", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "55b00d03-f9db-4c38-b831-fdaad4382d05", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "451aa387433b3eba469728b7243a984572c1c74893c20b849436a8874e6b9de7", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "53679a8b-9da4-4388-8008-c91d62d019db", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "70a2b5d20865a7a98bed71b32e81d1e8b4625a87b94e21a9360bc0af9a675718", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "43944cff-97d7-4d3d-8b1c-e1b1f06b98b5", "node_type": "1", "metadata": {}, "hash": "0e059f6291ca23db904370e27924ab6f6dee50a504abf4c2e7f0d4a9d8f253b3", "class_name": "RelatedNodeInfo"}}, "hash": "f2d63cce9c3d18199c2da154d9cced17cb645722330b1a64fdd39fc5589f6483", "text": "Notebook Magics\n\n\n```python\nimport pandas as pd\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension('bokeh', 'matplotlib')\n```\n\nThe Applying Customizations user guide describes the currently *recommended* way to customize your visualizations in HoloViews. Those mechanisms use standard Python syntax but they are not the only way to apply options as there is a much older approach for working with HoloViews that is specific to notebooks.\n\nFrom the start, HoloViews aimed to enable rapid exploration of data in Jupyter Notebooks. For this reason, when you load the HoloViews extension in a notebook, you also get a set of IPython magics. IPython magics use a syntax that is not standard Python and the HoloViews magics only apply in the notebook environment (and not the IPython terminal for instance).\n\nThe advantages of the notebook magics are:\n\n* They allow tab-completion in the notebook environment (but so do the more recent option builders and `hv.output` mechanisms).\n* They allow very concise expression of options and settings.\n\n\nUnfortunately, they also have some serious disadvantages:\n\n* They are not Python syntax which makes it difficult to use code written with magics in notebooks anywhere else. For instance, it makes it harder to use such code with bokeh server or panel.\n* They have their own special syntax which is very concise but also rather mysterious.\n\n\nThese disadvantages means the magics can be bewildering to anyone unfamiliar with the IPython specific syntax and HoloViews itself, and are no longer recommended for these reasons. This user guide documents these magics to allow people to understand older notebooks using HoloViews and to help people update these old notebooks to use the recommended Python API.", "start_char_idx": 2, "end_char_idx": 1774, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "43944cff-97d7-4d3d-8b1c-e1b1f06b98b5": {"__data__": {"id_": "43944cff-97d7-4d3d-8b1c-e1b1f06b98b5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e9744735-0bb2-44ca-b9be-86b6b83eb40f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "29b4510643cd832a2fcfb1803a33550a0f462c94e63ab6302e3135bb4186b4ab", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "75dde58b-f15f-43c7-bee9-bcd8ece76e20", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f2d63cce9c3d18199c2da154d9cced17cb645722330b1a64fdd39fc5589f6483", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "3efa2c34-0fb3-4b38-b2da-8be179a9adac", "node_type": "1", "metadata": {}, "hash": "f12442e595c5bc9d4491d5f32e4253ed7b9142f32d279ba7fdc7967ca507505d", "class_name": "RelatedNodeInfo"}}, "hash": "0e059f6291ca23db904370e27924ab6f6dee50a504abf4c2e7f0d4a9d8f253b3", "text": "Line and cell magics\n\nThere are two types of magic supported in Jupyter notebooks called *line magics* and *cell magics* respectively. Both typically appear at the top of code cells prefixed by `%` (line magics) or `%%` (cell magics).\n\n* **line magics**: These can appear anywhere in a code cell and effect global changes to the current notebook session. HoloViews has the `%opts` and `%output` line magics.\n* **cell magics**: These have to appear at the top of the cell and are used to modify how that cell is executed. HoloViews has the `%%opts` and `%%output` cell magics.", "start_char_idx": 2, "end_char_idx": 577, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "3efa2c34-0fb3-4b38-b2da-8be179a9adac": {"__data__": {"id_": "3efa2c34-0fb3-4b38-b2da-8be179a9adac", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b41a6341-0c2f-4240-8ff1-cc663ea4c3da", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d5ce9196b03f9997cd49897a5797c29f1bc5117acec34800c95c8deabdcbb412", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "43944cff-97d7-4d3d-8b1c-e1b1f06b98b5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0e059f6291ca23db904370e27924ab6f6dee50a504abf4c2e7f0d4a9d8f253b3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a0ee8dd5-520e-4c08-9905-6b6e26ac70fb", "node_type": "1", "metadata": {}, "hash": "00ca805212ebdcc692d872f45aa13483ff77c5a232c9904d6bcbc26c55f08eff", "class_name": "RelatedNodeInfo"}}, "hash": "f12442e595c5bc9d4491d5f32e4253ed7b9142f32d279ba7fdc7967ca507505d", "text": "The %opts and %%opts magics\n\nThese two magics are now served by `opts.defaults` and the `.opts` method respectively, as described in the Applying Customizations user guide.\n\n* *The ``%opts`` line magic*: IPython specific syntax applied globally *[string format]*\n* *The ``%%opts`` cell magic*: IPython specific syntax applies to displayed object *[string format]*\n\nThese magics have their own syntax that separates between *style*, *plot* and *norm* options described towards the end of the Applying Customizations user guide. The definition of the syntax is as follows:\n\n```\n[[spec] [normalization] [plotting options] [style options]]+\n\nspec: A dotted type.group.label specification\n (e.g. Curve,Sinusoid.Squared)\n\nnormalization: List of normalization options delimited by braces.\n One of | -axiswise | -framewise | +axiswise | +framewise |\n E.g. { +axiswise +framewise }\n\nplotting options: List of plotting option keywords delimited by\n square brackets. E.g. [show_title=False]\n\nstyle options: List of style option keywords delimited by\n parentheses. E.g. (lw=10 marker='+')\n```\n\nIn other words, you have a list of spec strings (for instance `Curve` or `Curve.Sinusoid`) followed by keywords in either parentheses, square brackets or braces to represent the style, plot and normalization options respectively.", "start_char_idx": 2, "end_char_idx": 1416, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a0ee8dd5-520e-4c08-9905-6b6e26ac70fb": {"__data__": {"id_": "a0ee8dd5-520e-4c08-9905-6b6e26ac70fb", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1421d3f5-72fd-4fbd-81bf-586ed9e01170", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9abd676e81fe85f78e240e677bdab747963f8398e32132109236ab3219bc3cb5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "3efa2c34-0fb3-4b38-b2da-8be179a9adac", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f12442e595c5bc9d4491d5f32e4253ed7b9142f32d279ba7fdc7967ca507505d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7c1f43be-dee1-4cc2-b7be-e1f67991dada", "node_type": "1", "metadata": {}, "hash": "3daec6777f53d877170524ea763633b4fa76bbc178e95d46d8ba715f8c096d6a", "class_name": "RelatedNodeInfo"}}, "hash": "00ca805212ebdcc692d872f45aa13483ff77c5a232c9904d6bcbc26c55f08eff", "text": "Example `%%opts` cell magic\n\nHere is the example from the Customization section of the 'Getting Started' customized using the `%%opts` cell magic:\n\n\n```python\n%%opts Curve [height=200 width=900 xaxis=None tools=['hover']]\n%%opts Curve (color='red' line_width=1.5)\n%%opts Spikes [height=150 width=900 yaxis=None] (color='grey' line_width=0.25)\n\nspike_train = pd.read_csv('../assets/spike_train.csv.gz')\ncurve = hv.Curve( spike_train, 'milliseconds', vdims='Hertz')\nspikes = hv.Spikes(spike_train, 'milliseconds', vdims=[])\nlayout = (curve+spikes).cols(1)\nlayout\n```\n\nThis `layout` object is now customized in a way that will persist, just like it would using the recommended `.opts` method together with option builders. It is worth noting that instead of just using element names, you can specify the group and label (e.g `Curve.Sinusoid.Squared`) to condition on that metadata, just the way you can using the option builders.", "start_char_idx": 2, "end_char_idx": 930, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7c1f43be-dee1-4cc2-b7be-e1f67991dada": {"__data__": {"id_": "7c1f43be-dee1-4cc2-b7be-e1f67991dada", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "bafdfb25-dd1a-4683-8fe6-46b06260fb6c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0eaa5a0c1cd48b6b643376f8cb0333f2f007402bb4cccebfabf33f1c9105af00", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a0ee8dd5-520e-4c08-9905-6b6e26ac70fb", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "00ca805212ebdcc692d872f45aa13483ff77c5a232c9904d6bcbc26c55f08eff", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d6d16aac-8d6a-4946-aff3-cdbd19772b80", "node_type": "1", "metadata": {}, "hash": "6734316ae6211742623c63f34de7cc4ab43d098ea43e1fef440f37943e55787d", "class_name": "RelatedNodeInfo"}}, "hash": "3daec6777f53d877170524ea763633b4fa76bbc178e95d46d8ba715f8c096d6a", "text": "Example `%opts` line magic\n\nHere is how you could use the `%opts` line magic instead of `opts.default` as detailed in the Applying Customizations user guide:\n\n\n\n\n```python\n%opts HeatMap (cmap='Summer') [colorbar=True, toolbar='above']\n```\n\nNow all `HeatMap` elements will use the 'Summer' colormap, showing a colorbar with the Bokeh toolbar at the top:\n\n\n```python\ndata = [(chr(65+i), chr(97+j), i*j) for i in range(5) for j in range(5) if i!=j]\nhv.HeatMap(data).sort()\n```", "start_char_idx": 2, "end_char_idx": 476, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d6d16aac-8d6a-4946-aff3-cdbd19772b80": {"__data__": {"id_": "d6d16aac-8d6a-4946-aff3-cdbd19772b80", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0d967f1b-e3d1-40d3-8e43-2f50fc2fa911", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e391ebaf1a0442125288d52baae34d8c1a92d2d9154d3caf39c655fbf0f393d2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7c1f43be-dee1-4cc2-b7be-e1f67991dada", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3daec6777f53d877170524ea763633b4fa76bbc178e95d46d8ba715f8c096d6a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6721c8ca-49f1-4243-9f0f-706f9e8a1b65", "node_type": "1", "metadata": {}, "hash": "fd8975b964d4f720ee57591969371352e0aa2560891b100703112b580a058e36", "class_name": "RelatedNodeInfo"}}, "hash": "6734316ae6211742623c63f34de7cc4ab43d098ea43e1fef440f37943e55787d", "text": "The `%output` line magic\n\nThe `%output` line magic has been fairly directly replaced by the `hv.output` utility. Here is an example of the `%output` line magic:\n\n\n\n\n```python\n%output backend='matplotlib', fig='svg'\n```\n\nThis ensures the following `Path` (and all subsequent `Path` objects) are rendered as SVG with matplotlib:\n\n\n```python\nlin = np.linspace(0, np.pi*2, 200)\n\ndef lissajous(t, a, b, delta):\n return (np.sin(a * t + delta), np.sin(b * t), t)\n\npath = hv.Path([lissajous(lin, 3, 5, np.pi/2)])\npath.opts(opts.Path(linewidth=2, color='red', linestyle='dotted'))\n```\n\nFor the purposes of this notebook, let us switch the plotting extension back to bokeh:\n\n\n```python\n%output backend='bokeh'\n```\n\nNote that the `%output` magic accepts the same set of output settings as the `hv.output` utility.", "start_char_idx": 2, "end_char_idx": 807, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6721c8ca-49f1-4243-9f0f-706f9e8a1b65": {"__data__": {"id_": "6721c8ca-49f1-4243-9f0f-706f9e8a1b65", "embedding": null, "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "1b9b7e67-e900-4c2e-9ad4-e3d64ae07978", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "52a67fc0289d67c438a1641a45431c25a8f84c47c5787d3de70b6a00ca231388", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d6d16aac-8d6a-4946-aff3-cdbd19772b80", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6734316ae6211742623c63f34de7cc4ab43d098ea43e1fef440f37943e55787d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "984c2e74-7362-483a-831e-7323a0d3d530", "node_type": "1", "metadata": {}, "hash": "abbd5dc271c269f1d3f2ea13b8394994cafdd8a90401251997ea138c2d6dd9d5", "class_name": "RelatedNodeInfo"}}, "hash": "fd8975b964d4f720ee57591969371352e0aa2560891b100703112b580a058e36", "text": "The `%%output` cell magic\n\nIf we want to *temporarily* switch to matplotlib with some custom output settings, we can use the `%%output` cell magic in an example combines the `%%output` and `%%opts` cell magics in the same cell:\n\n\n\n```python\n%%output backend='matplotlib' fig='svg' size=50\n%%opts Path (linewidth=3 color='blue')\nlin = np.linspace(0, np.pi*2, 200)\n\ndef lissajous(t, a, b, delta):\n return (np.sin(a * t + delta), np.sin(b * t), t)\n\nhv.Path([lissajous(lin, 3, 5, np.pi/2)])\n```\n\nThe recommended approach would now be to pass the `path` object to the `hv.output` utility as detailed in the Applying Customizations user guide. The magic processes the same set of output settings as the `hv.output` utility.", "start_char_idx": 2, "end_char_idx": 723, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "984c2e74-7362-483a-831e-7323a0d3d530": {"__data__": {"id_": "984c2e74-7362-483a-831e-7323a0d3d530", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "680ac102-b303-47a7-859a-575a2f5a7768", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a8e1e44fca621d9800f799a15e73c8d54b67bdedad6c40b5ed6ce631b6268eae", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6721c8ca-49f1-4243-9f0f-706f9e8a1b65", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fd8975b964d4f720ee57591969371352e0aa2560891b100703112b580a058e36", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c5aafee5-6a33-4ae3-acfe-95c9f9f356d7", "node_type": "1", "metadata": {}, "hash": "0fc77ec5ea3967b193ddc8bb2a8ac58fd6d3cff3466ac11298822723fa9ff68f", "class_name": "RelatedNodeInfo"}}, "hash": "abbd5dc271c269f1d3f2ea13b8394994cafdd8a90401251997ea138c2d6dd9d5", "text": "The Store object\n\nThe association between an Element or container and the backend specific plotting class is held on the global ``Store`` object. The ``Store`` object holds a ``registry`` of plot objects for each backend. We can view the registry for each backend by accessing ``Store.registry`` directly:\n\n\n```python\nimport holoviews.plotting.mpl\nlist(hv.Store.registry['matplotlib'].items())[0:5]\n```\n\nThe Store object provides a global registry not only for the plots themselves but also creates an entry in the OptionsTree for that particular backend. This allows options for that backend to be validated and enables setting plot, style and normalization options via the Options system system. We can view the ``OptionsTree`` object by requesting it from the store. We'll make a copy with just the first few entries so we can view the structure of the tree:\n\n\n```python\nopts = hv.Store.options(backend='matplotlib')\nhv.core.options.OptionTree(opts.items()[0:10], groups=['plot', 'style', 'norm'])\n```", "start_char_idx": 2, "end_char_idx": 1006, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c5aafee5-6a33-4ae3-acfe-95c9f9f356d7": {"__data__": {"id_": "c5aafee5-6a33-4ae3-acfe-95c9f9f356d7", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b5927433-e281-45c8-a0b6-322d8fc8d12a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b33421be06c94b8578c4e17fa6a4d9f277210946d3861c9ff1fb7e5c79a8be64", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "984c2e74-7362-483a-831e-7323a0d3d530", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "abbd5dc271c269f1d3f2ea13b8394994cafdd8a90401251997ea138c2d6dd9d5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4c9af740-6f11-4649-b263-a39fa98c313a", "node_type": "1", "metadata": {}, "hash": "3c664eb61060548805cee99302952174c923d980c58fb5c03610a906e7546fef", "class_name": "RelatedNodeInfo"}}, "hash": "0fc77ec5ea3967b193ddc8bb2a8ac58fd6d3cff3466ac11298822723fa9ff68f", "text": "Saving and rendering\n\nThe easiest entry points to rendering a HoloViews object either to the backend specific representation (e.g. a matplotlib figure) or directly to file are the ``hv.render`` and ``hv.save`` functions. Both are shortcuts for using an actual ``Renderer`` object, which will be introduced in the next section. To start with we will create a simple object, a ``Scatter`` element:\n\n\n```python\ncurve = hv.Curve(range(10))\ncurve\n```\n\nThis abstract and declarative representation of a ``Curve`` can be turned into an actual plot object, defaulting to the currently selected (or default) backend:\n\n\n```python\nfig = hv.render(curve)\nprint(type(fig))\n```\n\nBy providing an explicit ``backend`` keyword the plot can be rendered using a different backend.\n\n\n```python\np = hv.render(curve, backend='bokeh')\nprint(type(p))\n```\n\nThis can often be useful to customize a plot in more detail by tweaking styling in ways that are not directly supported by HoloViews. An alternative to ``hv.render`` in case you do not want to fully switch to the underlying plotting API are ``hooks``, which are a plot option on all elements. These allow defining hooks which modify a plot after it has been rendered in the backend but before it is displayed.\n\nA ``hook`` is given the HoloViews plot instance and the currently rendered element and thereby provides access to the rendered plot object to apply any customizations and changes which are not exposed by HoloViews:\n\n\n```python\ndef hook(plot, element):\n # Allows accessing the backends figure object\n plot.state\n \n # The handles contain common plot objects\n plot.handles\n\ncurve = curve.opts(hooks=[hook])\n```\n\nHooks allow for extensive tweaking of objects before they are finished rendering, without having to entirely abandon HoloViews' API and render the backend's plot object manually.\n\nIn much the same way the ``hv.save`` function allows exporting plots straight to a file, by default inferring the format from the file extension:\n\n\n```python\nhv.save(curve, 'curve.png')\n```\n\nJust like ``hv.render`` the ``hv.save`` function also allows specifying an explicit backend.\n\n\n```python\nhv.save(curve, 'curve.html', backend='bokeh')\n```\n\nAdditionally for ambiguous file extensions such as HTML it may be necessary to specify an explicit fmt to override the default, e.g. in the case of 'html' output the widgets will default to ``fmt='widgets'``, which may be changed to scrubber widgets using ``fmt='scrubber'``.", "start_char_idx": 2, "end_char_idx": 2471, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4c9af740-6f11-4649-b263-a39fa98c313a": {"__data__": {"id_": "4c9af740-6f11-4649-b263-a39fa98c313a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "98f8ceeb-74d4-481d-8873-77630fbc6e2c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e56ea4b0aa751c78619c850a90455fe540d61ba130e82e9b964b6a16c06cf098", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c5aafee5-6a33-4ae3-acfe-95c9f9f356d7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0fc77ec5ea3967b193ddc8bb2a8ac58fd6d3cff3466ac11298822723fa9ff68f", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "25f7cda3-674d-4e97-aeeb-b37f44bd9ad3", "node_type": "1", "metadata": {}, "hash": "1f8497fda1881fb34adc780531a98775139b90fcc2f75e91bbe9aea02f394f3a", "class_name": "RelatedNodeInfo"}}, "hash": "3c664eb61060548805cee99302952174c923d980c58fb5c03610a906e7546fef", "text": "Renderers\n\nHoloViews provides a general ``Renderer`` baseclass, which defines a general interface to render the output from different backends to a number of standard output formats such as ``png``, ``html`` or ``svg``. The ``__call__`` method on the Renderer automatically looks up and instantiates the registered plotting classes for an object it is passed and then returns the output in the requested format. To make this a bit clearer we'll break this down step by step. First we'll get a handle on the ``MPLRenderer`` and create an object to render.\n\nRenderers aren't registered with the Store until the corresponding backends have been imported. Loading the notebook extension with ``hv.notebook_extension('matplotlib')`` is one way of loading a backend and registering a renderer. Another is to simply import the corresponding plotting module as we did above.\n\n\n```python\nhv.Store.renderers\n```\n\nThis is one way to access a Renderer, another is to instantiate a Renderer instance directly, allowing you to override some of the default plot options.\n\n\n```python\nrenderer = hv.plotting.mpl.MPLRenderer.instance(dpi=120)\n```\n\nThe recommended way to get a handle on a renderer is to use the ``hv.renderer`` function which will also handle imports for you:\n\n\n```python\nhv.renderer('matplotlib')\n```", "start_char_idx": 2, "end_char_idx": 1302, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "25f7cda3-674d-4e97-aeeb-b37f44bd9ad3": {"__data__": {"id_": "25f7cda3-674d-4e97-aeeb-b37f44bd9ad3", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9cde8e41-afa4-41e8-94c8-9a08dd63ed98", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dc3ddbe20bf254b178cdd71e3a064e5a4bc68ed4a00102c00747d011620b639f", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4c9af740-6f11-4649-b263-a39fa98c313a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3c664eb61060548805cee99302952174c923d980c58fb5c03610a906e7546fef", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "d0f72a88-0750-4886-bac2-706c0d5dcd89", "node_type": "1", "metadata": {}, "hash": "7368aa4e8564673cd72faa6caeeb8fb2a3e72bfb3a0434ceb8642db61ea72f84", "class_name": "RelatedNodeInfo"}}, "hash": "1f8497fda1881fb34adc780531a98775139b90fcc2f75e91bbe9aea02f394f3a", "text": "Working with a Renderer\n\nA ``Renderer`` in HoloViews is responsible for instantiating a HoloViews plotting class. It does this by looking up the plotting class in the ``Store.registry``:\n\n\n```python\nhv.Store.registry['matplotlib'][hv.Curve]\n```\n\nIf we create a ``Curve`` we can instantiate a plotting class from it using the ``Renderer.get_plot`` method:\n\n\n```python\ncurve = hv.Curve(range(10))\ncurve_plot = renderer.get_plot(curve)\ncurve_plot\n```\n\nWe will revisit how to work with ``Plot`` instances later. For now all we need to know is that they are responsible for translating the HoloViews object (like the ``Curve``) into a backend specific plotting object, accessible on ``Plot.state``:\n\n\n```python\nprint(type(curve_plot.state), curve_plot.state)\ncurve_plot.state\n```\n\nIn case of the matplotlib backend this is a ``Figure`` object. However the ``Renderer`` ignores the specific representation of the plot, instead providing a unified interface to translating it into a representation that can displayed, i.e. either an image format or an HTML representation.\n\nIn this way we can convert the curve directly to its ``png`` representation by calling the ``Renderer`` with the object and the format:\n\n\n```python\nfrom IPython.display import display_png\npng, info = renderer(curve, fmt='png')\nprint(info)\ndisplay_png(png, raw=True)\n```\n\n\nTip: To find more information about any HoloViews object use hv.help to print a detailed docstring.\n\n\nThe valid figure display formats can be seen in the docstring of the Renderer or directly on the parameter:\n\n\n```python\nrenderer.param['fig'].objects\n```\n\nNote that to export PNG files using the bokeh renderer you may need to install some additional dependencies detailed here. If you are using conda, it is currently sufficient to run ``conda install selenium phantomjs pillow``.\n\nIn this way we can easily render the plot in different formats:\n\n\n```python\nfrom IPython.display import display_svg\nsvg, info = renderer(curve, fmt='svg')\nprint(info)\ndisplay_svg(svg, raw=True)\n```\n\nWe could save these byte string representations ourselves but the ``Renderer`` provides a convenient ``save`` method to do so. Simply supply the object the filename and the format, which doubles as the file extension:\n\n\n```python\nrenderer.save(curve, '/tmp/test', fmt='png')\n```\n\nAnother convenient way to render the object is to wrap it in HTML, which we can do with the ``html`` method:\n\n\n```python\nfrom IPython.display import display_html\nhtml = renderer.html(curve)\ndisplay_html(html, raw=True)\n```\n\nRendering plots containing ``HoloMap`` and ``DynamicMap`` objects will automatically generate a Panel HoloViews pane which can be rendered in the notebook, saved or rendered as a server app:\n\n\n```python\nholomap = hv.HoloMap({i: hv.Image(np.random.rand(10, 10)) for i in range(3)})\nwidget = renderer.get_widget(holomap, 'widgets')\nwidget\n```\n\nHowever most of the time it is more convenient to let the Renderer export the widget HTML, again via a convenient method, which will export a HTML document with all the required JS and CSS dependencies:\n\n\n```python\nhtml = renderer.static_html(holomap)\n```\n\nThis covers the basics of working with HoloViews renderers. This API is consistent across plotting backends, whether matplotlib, bokeh or plotly.", "start_char_idx": 2, "end_char_idx": 3272, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "d0f72a88-0750-4886-bac2-706c0d5dcd89": {"__data__": {"id_": "d0f72a88-0750-4886-bac2-706c0d5dcd89", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "22241a1b-1dd7-443e-b4fd-01deb167b9bf", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b90450e0c8e6b33d84b6fe0edcbfd1dfc325178429508a175705c6679801ed59", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "25f7cda3-674d-4e97-aeeb-b37f44bd9ad3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1f8497fda1881fb34adc780531a98775139b90fcc2f75e91bbe9aea02f394f3a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e958362a-3f02-45c6-b523-78fa1d7dae83", "node_type": "1", "metadata": {}, "hash": "84ee4ae82c3104534c48169edcde4329531b95f0f81de141cb26f04cf669fe9d", "class_name": "RelatedNodeInfo"}}, "hash": "7368aa4e8564673cd72faa6caeeb8fb2a3e72bfb3a0434ceb8642db61ea72f84", "text": "Plots\n\nAbove we saw how the Renderer looks up the appropriate plotting class but so far we haven't seen how the plotting actually works. Since HoloViews already nests the data into semantically meaningful components, which define the rough layout of the plots on the page, the plotting classes follow roughly the same hierarchy. To review this hierarchy have a look at the nesting diagram in the Building Composite objects guide.\n\nThe Layout and GridSpace plotting classes set up the figure and axes appropriately and then instantiate the subplots for all the objects that are contained within. For this purpose we will create a relatively complex object, a ``Layout`` of ``HoloMap``s containing ``Overlay``s containing ``Elements``. We'll instantiate the matching plotting hierarchy and then inspect it.\n\n\n```python\nhmap1 = hv.HoloMap({i: hv.Image(np.random.rand(10, 10)) * hv.Ellipse(0, 0, 0.2*i) for i in range(5)})\nelement = hv.Curve((range(10), np.random.rand(10)))\nlayout = hmap1 + element\n```\n\nWe can see the hierarchy in the object's repr:\n\n\n```python\nprint( repr(layout) )\n```\n\nNow that we've created the object we can again use the ``MPLRenderer`` to instantiate the plot:\n\n\n```python\nlayout_plot = renderer.get_plot(layout)\nlayout_plot\n```\n\nDuring instantiation the LayoutPlot expanded each object and created subplots. We can access them via a row, column based index and thereby view the first plot.\n\n\n```python\nadjoint_plot = layout_plot.subplots[0, 0]\nadjoint_plot\n```\n\nThis plotting layer handles plots adjoined to the plot. They are indexed by their position in the AdjointLayout which may include 'top', 'right' and 'main':\n\n\n```python\noverlay_plot = adjoint_plot.subplots['main']\noverlay_plot\n```\n\nNow we've drilled all the way down to the OverlayPlot level, we see as expected that this contains two further subplots, one for the ``Image`` and one for ``Text`` Element. \n\n\n```python\noverlay_plot.subplots.keys()\n```\n\nNow you might have noticed that the HoloMap seems to have disappeared from the hierarchy. This is because updating a particular plot is handled by the ``ElementPlots`` itself. With that knowledge we can now have a look at the actual plotting API.", "start_char_idx": 2, "end_char_idx": 2185, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e958362a-3f02-45c6-b523-78fa1d7dae83": {"__data__": {"id_": "e958362a-3f02-45c6-b523-78fa1d7dae83", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cae4b22a-3da0-4e1c-a38d-5af09b1767c4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2ff1e6f30d7abfdb9a129e49eb1ae142ca973616e57fe99b4d5946daf30ea0a5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "d0f72a88-0750-4886-bac2-706c0d5dcd89", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "7368aa4e8564673cd72faa6caeeb8fb2a3e72bfb3a0434ceb8642db61ea72f84", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "43888279-3972-46bf-878a-c81df033fdbf", "node_type": "1", "metadata": {}, "hash": "0d61172e44c5c3f41f982f674b8c9989991b16b5ff4e337cd384715393c6892b", "class_name": "RelatedNodeInfo"}}, "hash": "84ee4ae82c3104534c48169edcde4329531b95f0f81de141cb26f04cf669fe9d", "text": "Traversing plots\n\nWhen working with such deeply nested plots accessing leafs can be a lot of effort, therefore the plots also provide a ``traverse`` method letting you specify the types of plots you want to access:\n\n\n```python\nlayout_plot.traverse(specs=[hv.plotting.mpl.CurvePlot])\n```", "start_char_idx": 2, "end_char_idx": 288, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "43888279-3972-46bf-878a-c81df033fdbf": {"__data__": {"id_": "43888279-3972-46bf-878a-c81df033fdbf", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "81187f97-2f18-4c89-b4f4-71dc5e4626f4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3830919fb56b711f29f41ff5ec5839ce942e355fe6f06013ed813f0c3b1a67f9", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e958362a-3f02-45c6-b523-78fa1d7dae83", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "84ee4ae82c3104534c48169edcde4329531b95f0f81de141cb26f04cf669fe9d", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8a0814d7-350c-4305-b369-4e3f83efe4b9", "node_type": "1", "metadata": {}, "hash": "0849344f6f98070b529d5e373654a804455fe2de2e7ffd8ffb10a6d165376f83", "class_name": "RelatedNodeInfo"}}, "hash": "0d61172e44c5c3f41f982f674b8c9989991b16b5ff4e337cd384715393c6892b", "text": "Plotting API\n\nThere a few methods shared by all plotting classes, which allow the renderer to easily create, update and render a plot. The three most important methods and attributes are:\n\n* ``Plot.__init__`` - The constructor already handles a lot of the processing in a plot, it sets up all the subplots if there are any, computes ranges across the object to normalize the display, sets the options that were specified and instantiates the figure, axes, model graphs, or canvas objects depending on the backend.\n* ``Plot.initialize_plot`` - This method draws the initial frame to the appropriate figure, axis or canvas, setting up the various artists (matplotlib) or glyphs (bokeh).\n* ``Plot.update`` - This method updates an already instantiated plot with the data corresponding to the supplied key. This key should match the key in the HoloMap.", "start_char_idx": 2, "end_char_idx": 850, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8a0814d7-350c-4305-b369-4e3f83efe4b9": {"__data__": {"id_": "8a0814d7-350c-4305-b369-4e3f83efe4b9", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "5d555947-5187-483d-b39d-4e7196a9a0b7", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "1031ccb663f9dba89392feff83e0e85fefac4fefdfa2080b96700a3a15f79a29", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "43888279-3972-46bf-878a-c81df033fdbf", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0d61172e44c5c3f41f982f674b8c9989991b16b5ff4e337cd384715393c6892b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "51b325d9-5c35-439e-96f2-9752189fc8a6", "node_type": "1", "metadata": {}, "hash": "f331254b10725404a9ab1286cd42670234fc01ad58e3141e8541764e5aa96048", "class_name": "RelatedNodeInfo"}}, "hash": "0849344f6f98070b529d5e373654a804455fe2de2e7ffd8ffb10a6d165376f83", "text": "Initializing\n\nThe Renderer and the widgets use these three methods to instantiate and update a plot to render both static frames and animations or widgets as defined by the ``HoloMap`` or ``DynamicMap``. Above we already instantiated a plot, now we initialize it, thereby drawing the first (or rather last frame).\n\n\n```python\nfig = layout_plot.initialize_plot()\nfig\n```", "start_char_idx": 2, "end_char_idx": 371, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "51b325d9-5c35-439e-96f2-9752189fc8a6": {"__data__": {"id_": "51b325d9-5c35-439e-96f2-9752189fc8a6", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0a79dbc9-ae9a-409d-94c1-3e2e2815242e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a45510e95b5c28e926e5c3dc4b5409633996d3079769a52d255b42d8214f78bc", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8a0814d7-350c-4305-b369-4e3f83efe4b9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0849344f6f98070b529d5e373654a804455fe2de2e7ffd8ffb10a6d165376f83", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "66715a49-4571-4ac1-b9df-7f59cc6e1f6c", "node_type": "1", "metadata": {}, "hash": "3030b495d8035729ddf670b04e57c0c045186f6b70e7a0d1e080216fec22e207", "class_name": "RelatedNodeInfo"}}, "hash": "f331254b10725404a9ab1286cd42670234fc01ad58e3141e8541764e5aa96048", "text": "Updating\n\nWe can see ``initialize_plot`` has rendered the last frame with the key ``4``. We can update the figure with another key simply by calling the ``Plot.update`` method with the corresponding key.\n\n\n```python\nlayout_plot.update(0)\n```\n\n\n```python\nplot = hv.plotting.mpl.RasterPlot(holomap)\nplot\n```\n\nInternally each level of the plotting hierarchy updates all the objects below it, all the way down to the ElementPlots, which handle updating the plotting data.", "start_char_idx": 2, "end_char_idx": 469, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "66715a49-4571-4ac1-b9df-7f59cc6e1f6c": {"__data__": {"id_": "66715a49-4571-4ac1-b9df-7f59cc6e1f6c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "01d004c6-72bb-40c1-9027-cba6150771ef", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "821dc21571628071cd5e70e2e6f836792a6e1c6bf8035e521a4f0365c8bbbfba", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "51b325d9-5c35-439e-96f2-9752189fc8a6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f331254b10725404a9ab1286cd42670234fc01ad58e3141e8541764e5aa96048", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "0af23c4a-6450-4e55-b0d8-1f4930bb2132", "node_type": "1", "metadata": {}, "hash": "457c9ae41428667d15a8720ce46238ff7c932fc42dc5f53509c8b58133454d58", "class_name": "RelatedNodeInfo"}}, "hash": "3030b495d8035729ddf670b04e57c0c045186f6b70e7a0d1e080216fec22e207", "text": "Dynamic plot updates\n\nSince DynamicMaps may be updated based on stream events they don't work via quite the same API. Each stream automatically captures the plots it is attached to and whenever it receives an event it will update the plot.\n\n\n```python\ndmap = hv.DynamicMap(lambda x: hv.Points(np.arange(x)), kdims=[], streams=[hv.streams.PointerX(x=10)])\nplot = renderer.get_plot(dmap)\nplot.initialize_plot()\n```\n\nInternally the update to the stream value will automatically trigger the plot to update, here we will disable this by setting ``trigger=False`` and explicitly calling ``refresh`` on the plot:\n\n\n```python\ndmap.event(x=20,)\nplot.refresh()\nplot.state\n```", "start_char_idx": 2, "end_char_idx": 667, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "0af23c4a-6450-4e55-b0d8-1f4930bb2132": {"__data__": {"id_": "0af23c4a-6450-4e55-b0d8-1f4930bb2132", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fc632f57-8a8b-493b-8dd6-51a9ee0531d0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "84bb3cf368824fc4746719e032aea87462f57ab1508b3492153f5fbb41db6812", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "66715a49-4571-4ac1-b9df-7f59cc6e1f6c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3030b495d8035729ddf670b04e57c0c045186f6b70e7a0d1e080216fec22e207", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "56ae71a9-0910-45b4-803d-22aada52b2a3", "node_type": "1", "metadata": {}, "hash": "96fe29809a836ced195d32450e43a07ce3edf10a165fa9f190157df99176b812", "class_name": "RelatedNodeInfo"}}, "hash": "457c9ae41428667d15a8720ce46238ff7c932fc42dc5f53509c8b58133454d58", "text": "Plotting handles\n\nIn addition to accessing the overall state of the plot each plotting class usually keeps direct handles for important plotting elements on the ``handles`` attribute:\n\n\n```python\nplot.handles\n```\n\nHere we can see how the ``PointPlot`` keeps track of the artist, which is a matplotlib ``PathCollection``, the axis, the figure and the plot title. In addition all matplotlib plots also keep track of a list of any additional plotting elements which should be considered in the bounding box calculation.\n\nThis is only the top-level API, which is used by the Renderer to render the plot, animation or widget. Each backend has internal APIs to create and update the various plot components.", "start_char_idx": 2, "end_char_idx": 703, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "56ae71a9-0910-45b4-803d-22aada52b2a3": {"__data__": {"id_": "56ae71a9-0910-45b4-803d-22aada52b2a3", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7e4efd93-738d-4d08-9d15-e21f4da4024f", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5f79c1904490c50e3ad32eac22a560dba13150aae392afb0aed8c05ef04f3c8c", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "0af23c4a-6450-4e55-b0d8-1f4930bb2132", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "457c9ae41428667d15a8720ce46238ff7c932fc42dc5f53509c8b58133454d58", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "1089916b-a354-4183-bef4-4bdff68cfd52", "node_type": "1", "metadata": {}, "hash": "ba918cb6339bd624b46d42716eafdcc8f32c271255a15d487b767929e90272af", "class_name": "RelatedNodeInfo"}}, "hash": "96fe29809a836ced195d32450e43a07ce3edf10a165fa9f190157df99176b812", "text": "Using the matplotlib renderer outside of a Jupyter notebook\n\nThe matplotlib renderer can be used outside of a notebook by using the `show` method. If running in a python script, this will cause the usual matplotlib window to appear. This is done as follows:\n\n mr = hv.renderer('matplotlib')\n mr.show(curve)", "start_char_idx": 2, "end_char_idx": 314, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "1089916b-a354-4183-bef4-4bdff68cfd52": {"__data__": {"id_": "1089916b-a354-4183-bef4-4bdff68cfd52", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "aa65c548-98e0-46b0-8b51-41cf140cb22a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ea8685fe1128abcb81561ffa9d5de69288ef8227d2b41398b292e272230914f4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "56ae71a9-0910-45b4-803d-22aada52b2a3", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "96fe29809a836ced195d32450e43a07ce3edf10a165fa9f190157df99176b812", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c8ebff7a-612e-42f9-86cb-07a0809445f7", "node_type": "1", "metadata": {}, "hash": "0af7afeaca08d2fd0cfa08623873642ca753589a4a0b205fe4dd637cc1709e99", "class_name": "RelatedNodeInfo"}}, "hash": "ba918cb6339bd624b46d42716eafdcc8f32c271255a15d487b767929e90272af", "text": "Plotting with Bokeh\n\n\n```python\nimport numpy as np\nimport pandas as pd\nimport holoviews as hv\nfrom holoviews import dim, opts\n\nhv.extension('bokeh')\n```\n\nOne of the major design principles of HoloViews is that the declaration of data is completely independent from the plotting implementation. Bokeh provides a powerful platform to generate interactive plots using HTML5 canvas and WebGL, and is ideally suited towards interactive exploration of data. By combining the ease of generating interactive, high-dimensional visualizations with the interactive widgets and fast rendering provided by Bokeh, HoloViews becomes even more powerful.\n\nThis user guide will cover various interactive features that bokeh provides which is not covered by the more general user guides, including interactive tools, linked axes and brushing and more. The general principles behind customizing plots and styling the visual elements of a plot are covered in the Style Mapping and Customizing Plots user guides.", "start_char_idx": 2, "end_char_idx": 992, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c8ebff7a-612e-42f9-86cb-07a0809445f7": {"__data__": {"id_": "c8ebff7a-612e-42f9-86cb-07a0809445f7", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a18406e6-031a-4eea-a622-1a8c68635e53", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ad3b4ea490255b6ab77f1dda366485313ee43b5748088e982a0873542e89c02d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "1089916b-a354-4183-bef4-4bdff68cfd52", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "ba918cb6339bd624b46d42716eafdcc8f32c271255a15d487b767929e90272af", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8ceb67c1-83b6-4045-a019-ba859b8d0996", "node_type": "1", "metadata": {}, "hash": "f483829572a75bfac3e486617d1644c51625c61757d5a80beb0dbedaeb137ed8", "class_name": "RelatedNodeInfo"}}, "hash": "0af7afeaca08d2fd0cfa08623873642ca753589a4a0b205fe4dd637cc1709e99", "text": "Working with bokeh directly\n\nWhen HoloViews outputs bokeh plots it creates and manipulates bokeh models in the background. If at any time you need access to the underlying Bokeh representation of an object you can use the ``hv.render`` function to convert it. For example let us convert a HoloViews ``Image`` to a bokeh Figure, which will let us access and modify every aspect of the plot:\n\n\n```python\nimg = hv.Image(np.random.rand(10, 10))\n\nfig = hv.render(img)\n\nprint('Figure: ', fig)\nprint('Renderers: ', fig.renderers[-1].glyph)\n```", "start_char_idx": 2, "end_char_idx": 538, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8ceb67c1-83b6-4045-a019-ba859b8d0996": {"__data__": {"id_": "8ceb67c1-83b6-4045-a019-ba859b8d0996", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0d0a39f3-3807-4b99-b75a-cc60dbb5c532", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a61fec86df93ba34ec7cd0fd3daa2796a3026e16f90cddfa1e431c56dcf79188", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c8ebff7a-612e-42f9-86cb-07a0809445f7", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0af7afeaca08d2fd0cfa08623873642ca753589a4a0b205fe4dd637cc1709e99", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ec6566dd-c689-4d8e-a612-c3d436497d0c", "node_type": "1", "metadata": {}, "hash": "297c6f2bf16fe34c57beddd35981e52e481622064b301b14df7c265806d0fd3b", "class_name": "RelatedNodeInfo"}}, "hash": "f483829572a75bfac3e486617d1644c51625c61757d5a80beb0dbedaeb137ed8", "text": "Exporting static files\n\nBokeh supports static export to png's using ``Selenium``, ``PhantomJS`` and ``pillow``, to install the required dependencies run:\n\n```\nconda install selenium phantomjs pillow\n```\n\nalternatively install PhantomJS from npm using:\n\n```\nnpm install -g phantomjs-prebuilt\n```\n\nTo switch to png output persistently you can run:\n\n```\nhv.output(fig='png')\n```\n\n\n```python\nviolin = hv.Violin(np.random.randn(100))\n\nhv.output(violin, fig='png')\n```\n\nThe exported png can also be saved to disk using the ``save`` function by changing the file extension from ``.html``, which exports an interactive plot, ``.png``:\n\n```python\nhv.save(violin, 'violin.png')\n```", "start_char_idx": 2, "end_char_idx": 673, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ec6566dd-c689-4d8e-a612-c3d436497d0c": {"__data__": {"id_": "ec6566dd-c689-4d8e-a612-c3d436497d0c", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "3bfce97d-2793-43cc-ac33-1c2186c9ce90", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "532d385265c999ba225fda5e718e818bfd5ba03d7a29eb2c04987d11a5fd5d5e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8ceb67c1-83b6-4045-a019-ba859b8d0996", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f483829572a75bfac3e486617d1644c51625c61757d5a80beb0dbedaeb137ed8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f467e52d-ca7e-44f0-9a6a-71c412d288a4", "node_type": "1", "metadata": {}, "hash": "b79216df7f23dfa3c9006a23c4b7497994c7a9aca0601833e0671d1311f9c4ba", "class_name": "RelatedNodeInfo"}}, "hash": "297c6f2bf16fe34c57beddd35981e52e481622064b301b14df7c265806d0fd3b", "text": "Element Style options\n\nOne of the major benefits of bokeh is that it was designed from the ground up with consistency in mind, therefore most style options are a combination of the fill, line, and text style options listed below:\n\n\n```python\nfrom holoviews.plotting.bokeh.styles import (line_properties, fill_properties, text_properties)\nprint(\"\"\"\nLine properties: %s\\n\nFill properties: %s\\n\nText properties: %s\n\"\"\" % (line_properties, fill_properties, text_properties))\n```\n\nNote also that most of these options support vectorized style mapping as described in the Style Mapping user guide. Here's an example of HoloViews Elements using a Bokeh backend, with bokeh's style options:\n\n\n```python\ncurve_opts = opts.Curve(line_width=10, line_color='indianred', line_dash='dotted', line_alpha=0.5)\npoint_opts = opts.Points(fill_color='#00AA00', fill_alpha=0.5, line_width=1, line_color='black', size=5)\ntext_opts = opts.Text(text_align='center', text_baseline='middle', text_color='gray', text_font='Arial')\n\nxs = np.linspace(0, np.pi*4, 100)\ndata = (xs, np.sin(xs))\n\n(hv.Curve(data) + hv.Points(data) + hv.Text(6, 0, 'Here is some text')).opts(\n curve_opts, point_opts, text_opts)\n```\n\nNotice that because the first two plots use the same underlying data, they become linked, such that zooming or panning one of the plots makes the corresponding change on the other.", "start_char_idx": 2, "end_char_idx": 1369, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f467e52d-ca7e-44f0-9a6a-71c412d288a4": {"__data__": {"id_": "f467e52d-ca7e-44f0-9a6a-71c412d288a4", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "85c118a5-fda0-4a6e-9e1e-f91a24b1b343", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d150efc9f043c29d3bd1152a566103224179aa208e93cae6f858fa3dcda7e181", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ec6566dd-c689-4d8e-a612-c3d436497d0c", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "297c6f2bf16fe34c57beddd35981e52e481622064b301b14df7c265806d0fd3b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "55870a1b-96cf-472e-b24e-51752903aeee", "node_type": "1", "metadata": {}, "hash": "a9797a5708fcfef83ff760c52af4b8fd5a2f8e23d8ed7fb9f3684e7747d2e8d8", "class_name": "RelatedNodeInfo"}}, "hash": "b79216df7f23dfa3c9006a23c4b7497994c7a9aca0601833e0671d1311f9c4ba", "text": "Setting Backend Opts\n\nHoloViews does not expose every single option from Bokeh.\n\nInstead, HoloViews allow users to attach hooks to modify the plot object directly--but writing these hooks could be cumbersome, especially if it's only used for a single line of update.\n\nFortunately, HoloViews allows `backend_opts` for the Bokeh backend to configure options by declaring a dictionary with accessor specification for updating the plot components.\n\nFor example, here's how to make the toolbar auto-hide.\n\n\n```python\nhv.Curve(data).opts(\n backend_opts={\"plot.toolbar.autohide\": True}\n)\n```\n\nThe following is the equivalent, as a hook.\n\n\n```python\ndef hook(hv_plot, element):\n toolbar = hv_plot.handles['plot'].toolbar\n toolbar.autohide = True\n\nhv.Curve(data).opts(hooks=[hook])\n```\n\nNotice how much more concise it is with `backend_opts`!\n\nWith knowledge of the attributes of Bokeh, it's possible to configure many other plot components besides `toolbar`. Some examples include `legend`, `colorbar`, `xaxis`, `yaxis`, and much, much more.\n\nIf you're unsure, simply input your best guess and it'll try to provide a list of suggestions if there's an issue.", "start_char_idx": 2, "end_char_idx": 1160, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "55870a1b-96cf-472e-b24e-51752903aeee": {"__data__": {"id_": "55870a1b-96cf-472e-b24e-51752903aeee", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "78f99c44-9df4-4d1b-b300-0a6097b616e0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "47afdbf320a0d1453e7effe787a1d8e3e452bfd4a8cedd7824df60e17eb64b44", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f467e52d-ca7e-44f0-9a6a-71c412d288a4", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b79216df7f23dfa3c9006a23c4b7497994c7a9aca0601833e0671d1311f9c4ba", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ae4e5e12-c6eb-41ed-8a56-e0ea732402dd", "node_type": "1", "metadata": {}, "hash": "bd14c974e80957fad71ffcc44e68a4fb873d1307294331e628d8d8fae9617045", "class_name": "RelatedNodeInfo"}}, "hash": "a9797a5708fcfef83ff760c52af4b8fd5a2f8e23d8ed7fb9f3684e7747d2e8d8", "text": "Sizing Elements\n\nIn the bokeh backend the sizing of plots and specifically layouts of plots is determined in an inside-out or compositional manner. Each subplot can be sized independently and it will fill the allocated space. The sizing is determined by the combination of width, height, aspect and responsive options. In this section we will discover the different approaches to setting plot dimensions and aspects.", "start_char_idx": 2, "end_char_idx": 418, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ae4e5e12-c6eb-41ed-8a56-e0ea732402dd": {"__data__": {"id_": "ae4e5e12-c6eb-41ed-8a56-e0ea732402dd", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "20d6ea59-895c-4346-8f32-1287c7edd597", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c4aa21a9eecbdb0f644e4e662628180e5ef863df73b2d78e94130003f6b37de6", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "55870a1b-96cf-472e-b24e-51752903aeee", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a9797a5708fcfef83ff760c52af4b8fd5a2f8e23d8ed7fb9f3684e7747d2e8d8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8a096199-a981-4bfc-a46c-469f42b4e472", "node_type": "1", "metadata": {}, "hash": "5ddff0c01789dbe4477d49e868441cd473cba13648adde66b2f89f3027712ddb", "class_name": "RelatedNodeInfo"}}, "hash": "bd14c974e80957fad71ffcc44e68a4fb873d1307294331e628d8d8fae9617045", "text": "Width and height\n\nThe most straightforward approach to specifying the size of a plot is using a width and height specified in pixels. This is the default behavior and makes it easy to achieve precise alignment between plots but does not allow for keeping a constant aspect or responsive resizing. In particular, the specified size includes the axes and any legends or colorbars.\n\n\n```python\npoints_a = hv.Points(data)\npoints_b = hv.Points(data)\n\npoints_a.opts(width=300, height=300) + points_b.opts(width=600, height=300)\n```", "start_char_idx": 2, "end_char_idx": 527, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8a096199-a981-4bfc-a46c-469f42b4e472": {"__data__": {"id_": "8a096199-a981-4bfc-a46c-469f42b4e472", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0986dfa3-cb0e-4a25-8dde-060477424f7d", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4e854316dc9e6d651e6c2a3bf94baceaea01f2b7ce379d491adac598351aa7a8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ae4e5e12-c6eb-41ed-8a56-e0ea732402dd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bd14c974e80957fad71ffcc44e68a4fb873d1307294331e628d8d8fae9617045", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c553789c-385e-41f7-90dd-ff3cc3ddb761", "node_type": "1", "metadata": {}, "hash": "b3580f9ae3a5799028b2f7f0e6a2dfc729c09893014d97a88402b8c70c0fddac", "class_name": "RelatedNodeInfo"}}, "hash": "5ddff0c01789dbe4477d49e868441cd473cba13648adde66b2f89f3027712ddb", "text": "Frame width and height\n\nThe frame width on the other hand provides precise control over the inner dimensions of a plot, it ensures the actual plot frame matches the specified dimensions exactly. This makes it possible to achieve a precise aspect ratio between the axis scales, without worrying about the size of axes, colorbars, titles and legends, e.g. below we can see two plots defined using explicit ``frame_width`` and ``frame_height`` share the same dimensions despite the fact that one has a colorbar.\n\n\n```python\nxs = ys = np.arange(10)\nyy, xx = np.meshgrid(xs, ys)\nzz = xx*yy\n\nimg = hv.Image(np.random.rand(100, 100))\n\npoints_a.opts(frame_width=200, frame_height=200) +\\\nimg.opts(frame_width=200, frame_height=200, colorbar=True, axiswise=True)\n```", "start_char_idx": 2, "end_char_idx": 760, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c553789c-385e-41f7-90dd-ff3cc3ddb761": {"__data__": {"id_": "c553789c-385e-41f7-90dd-ff3cc3ddb761", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "ee84bfc9-298e-4888-a90c-56f414080368", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "76c7666644d6b60638fa74f2471b4803ecc856682f34f6b5899167cb93225c1b", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8a096199-a981-4bfc-a46c-469f42b4e472", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5ddff0c01789dbe4477d49e868441cd473cba13648adde66b2f89f3027712ddb", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cdd01298-eca5-4c12-b853-63fe91edb3a6", "node_type": "1", "metadata": {}, "hash": "e53b5f60305640bc334eef180b9efce4e64caae9083437eb5fc4fedd52da6cef", "class_name": "RelatedNodeInfo"}}, "hash": "b3580f9ae3a5799028b2f7f0e6a2dfc729c09893014d97a88402b8c70c0fddac", "text": "Aspect\n\nThe ``aspect`` and ``data_aspect`` options provide control over the scaling of the plot dimensions and the axis limits.", "start_char_idx": 2, "end_char_idx": 129, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cdd01298-eca5-4c12-b853-63fe91edb3a6": {"__data__": {"id_": "cdd01298-eca5-4c12-b853-63fe91edb3a6", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d614e1af-3b7a-40b6-a458-6caff78059c5", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "aafc9d77b6a7359e806d957b634c590656825ce55b74909841f46a797bf0ae15", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c553789c-385e-41f7-90dd-ff3cc3ddb761", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b3580f9ae3a5799028b2f7f0e6a2dfc729c09893014d97a88402b8c70c0fddac", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e102e157-a711-4481-966a-9bf46c7290d8", "node_type": "1", "metadata": {}, "hash": "cd32645026d4fcd0de9ebb648b3dd23eaf92110373b8390f416420bf5a704b0b", "class_name": "RelatedNodeInfo"}}, "hash": "e53b5f60305640bc334eef180b9efce4e64caae9083437eb5fc4fedd52da6cef", "text": "``aspect``:\n\nThe ``aspect`` specifies the ratio between the width and height dimensions of the plot. If specified this options takes absolute precedence over the dimensions of the plot but has no effect on the plot's axis limits. It supports the following options:\n\n* **``float``** : A numeric value will scale the ratio of plot width to plot height\n* **``\"equal\"``** : Sets aspect of the axis scaling to be equal, equivalent to **``data_aspect=1``**\n* **``\"square\"``** : Ensures the plot dimensions are square.", "start_char_idx": 2, "end_char_idx": 513, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e102e157-a711-4481-966a-9bf46c7290d8": {"__data__": {"id_": "e102e157-a711-4481-966a-9bf46c7290d8", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "cf462911-593f-43c8-8d16-eefecd7573a4", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fff35c5e0e8cf30b7f77ede20c0002e10d5b7f3285cde3db0366f87d03162652", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cdd01298-eca5-4c12-b853-63fe91edb3a6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e53b5f60305640bc334eef180b9efce4e64caae9083437eb5fc4fedd52da6cef", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5b07dfb1-4be9-4756-9412-87986d0a8d14", "node_type": "1", "metadata": {}, "hash": "f1b88454e16f4add2b2c58bc3c48aa16ae14b808f682587ccf12842413f2bc8a", "class_name": "RelatedNodeInfo"}}, "hash": "cd32645026d4fcd0de9ebb648b3dd23eaf92110373b8390f416420bf5a704b0b", "text": "``data_aspect``:\n\nThe ``data_aspect`` specifies the scaling between the x- and y-axis ranges. If specified this option will scale both the plot ranges and dimensions unless explicit ``aspect``, ``width`` or ``height`` value overrides the plot dimensions:\n\n* **``float``** : Sets ratio between the units on the x-scale and the y-scale\n\n\n```python\nxs = np.linspace(0, 10)\nys = np.linspace(0, 5)\n\nimg = hv.Image((xs, ys, xs[:, np.newaxis]*np.sin(ys*4)))\n\n(img.options(aspect='equal').relabel('aspect=\\'equal\\'') +\n img.options(aspect='square', colorbar=True, frame_width=300).relabel('aspect=\\'square\\'') +\n img.options(aspect=2).relabel('aspect=2') + \n img.options(data_aspect=2, frame_width=300).relabel('data_aspect=2')).cols(2)\n```", "start_char_idx": 2, "end_char_idx": 734, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5b07dfb1-4be9-4756-9412-87986d0a8d14": {"__data__": {"id_": "5b07dfb1-4be9-4756-9412-87986d0a8d14", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4d70853d-8305-4aab-9b57-d4f225d2ff3c", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6a779ad4c16a8b6c08a4bae8b70f0257c00ad37ccd1e71a3220f0cf67dc694f2", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e102e157-a711-4481-966a-9bf46c7290d8", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cd32645026d4fcd0de9ebb648b3dd23eaf92110373b8390f416420bf5a704b0b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "bfccf24c-8f6b-4c8a-bca9-bf4936af3f3b", "node_type": "1", "metadata": {}, "hash": "207a863a5cdd534920af4014fcd07181490434a1ef8985d7c9482886e74b1485", "class_name": "RelatedNodeInfo"}}, "hash": "f1b88454e16f4add2b2c58bc3c48aa16ae14b808f682587ccf12842413f2bc8a", "text": "Responsive\n\nSince bokeh plots are rendered within a browser window which can be resized dynamically it supports responsive sizing modes allowing the plot to rescale when the window it is placed in is changed. If enabled, the behavior of ``responsive`` modes depends on whether an aspect or width/height option is set. Specifically responsive mode will only work if at least one dimension of the plot is left undefined, e.g. when width and height or width and aspect are set the plot is set to a fixed size, ignoring any ``responsive`` option. This leaves four different ``responsive`` modes:\n\n* **``scale_both``**: If neither a width or a height are defined but a fixed aspect is defined both axes will be scaled up to the maximum size of the container. Scaling ensures that the aspect ratio of the plot is maintained.\n* **``stretch_both``**: If neither a width, height or aspect are defined the plot will stretch to fill all available space.\n* **``stretch_width``**: If a height but neither a width or aspect are defined the plot will stretch to fill all available horizontal space.\n* **``stretch_height``**: If a width but neither a height or aspect are defined the plot will stretch to fill all available vertical space.\n\n**Note**: In the notebook stretching and scaling the height does not increase the size of a cell.\n\nAs a simple example let us declare a plot that has a fixed height but stretches to fit all available horizontal space:\n\n\n```python\nhv.Points(data).opts(height=200, responsive=True, title='stretch width')\n```\n\nSimilarly if we declare a fixed ``aspect`` or ``data_aspect`` responsive modes will try to fill all available space but avoid distorting the specified aspect:\n\n\n```python\nimg.opts(data_aspect=0.5, responsive=True, title='scale both')\n```", "start_char_idx": 2, "end_char_idx": 1772, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "bfccf24c-8f6b-4c8a-bca9-bf4936af3f3b": {"__data__": {"id_": "bfccf24c-8f6b-4c8a-bca9-bf4936af3f3b", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "613fdbe9-48fa-41f7-ad2b-1ec746c3b5f2", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "6a1a7e4133a561881ee7e3ab47d120403fe379323c916897c76a42f31736d39d", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5b07dfb1-4be9-4756-9412-87986d0a8d14", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f1b88454e16f4add2b2c58bc3c48aa16ae14b808f682587ccf12842413f2bc8a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "8a350eb6-56d2-4961-b178-af7f1b83c984", "node_type": "1", "metadata": {}, "hash": "d67a3c401e79817438d258e17382962fe47b547a551ba15462fcce97577bd077", "class_name": "RelatedNodeInfo"}}, "hash": "207a863a5cdd534920af4014fcd07181490434a1ef8985d7c9482886e74b1485", "text": "Alignment\n\nThe alignment of a plot in a row or column can be controlled using the ``align`` option. It controls both the vertical alignment in a row and the horizontal alignment in a column and can be set to one of `'start'`, `'center'` or `'end'` (where `'start'` is the default).", "start_char_idx": 2, "end_char_idx": 283, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "8a350eb6-56d2-4961-b178-af7f1b83c984": {"__data__": {"id_": "8a350eb6-56d2-4961-b178-af7f1b83c984", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "8c415403-83cb-46a0-9100-adb46a5cefe8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "71acbbc80c3c45920dbada71f5d1ec74c5548f70b7e1146fd8780927e7591a93", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "bfccf24c-8f6b-4c8a-bca9-bf4936af3f3b", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "207a863a5cdd534920af4014fcd07181490434a1ef8985d7c9482886e74b1485", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "ef25f0fc-8f31-43a3-9d60-5e4e3451cfb1", "node_type": "1", "metadata": {}, "hash": "8bccf941079f178593ed45db5d6d5aa812f40aa44d7c86fc375403fd70169221", "class_name": "RelatedNodeInfo"}}, "hash": "d67a3c401e79817438d258e17382962fe47b547a551ba15462fcce97577bd077", "text": "Vertical\n\n\n```python\npoints = hv.Points(data).opts(axiswise=True)\nimg = hv.Image((xs, ys, xs[:, np.newaxis]*np.sin(ys*4)))\n\nimg + points.opts(height=200, align='end')\n```", "start_char_idx": 2, "end_char_idx": 172, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "ef25f0fc-8f31-43a3-9d60-5e4e3451cfb1": {"__data__": {"id_": "ef25f0fc-8f31-43a3-9d60-5e4e3451cfb1", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "de12d501-d31f-4061-b714-9998c95b4347", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b00c54845a6835f21c1bc2ce5d95a4cb73d3fbd7f98f7d797fb7de9e2b4140c3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "8a350eb6-56d2-4961-b178-af7f1b83c984", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d67a3c401e79817438d258e17382962fe47b547a551ba15462fcce97577bd077", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "87801a5d-00b4-4797-9dc2-ce76531d3549", "node_type": "1", "metadata": {}, "hash": "cece6e1a9bb9ca1e3cf6ec7b70345d71c032b201b5ca1510c1c36c54d2b5c8f4", "class_name": "RelatedNodeInfo"}}, "hash": "8bccf941079f178593ed45db5d6d5aa812f40aa44d7c86fc375403fd70169221", "text": "Horizontal\n\n\n```python\n(img.opts(axiswise=True, width=200, align='center') + points).cols(1)\n```", "start_char_idx": 2, "end_char_idx": 98, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "87801a5d-00b4-4797-9dc2-ce76531d3549": {"__data__": {"id_": "87801a5d-00b4-4797-9dc2-ce76531d3549", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "4fe71221-fba0-414f-a43d-b6963c49b21b", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "13b14d1e49ad379f3c5d175375d8630ec50d1093c4bf8067ee55526aa98482a3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "ef25f0fc-8f31-43a3-9d60-5e4e3451cfb1", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8bccf941079f178593ed45db5d6d5aa812f40aa44d7c86fc375403fd70169221", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "48fa2dcd-2723-4fc0-8e65-5091e71e00ab", "node_type": "1", "metadata": {}, "hash": "4bab6e181c1ff23b150e7a5d74c7dfa642e111ded14d5c570edf5058392f457e", "class_name": "RelatedNodeInfo"}}, "hash": "cece6e1a9bb9ca1e3cf6ec7b70345d71c032b201b5ca1510c1c36c54d2b5c8f4", "text": "Grid lines\n\nGrid lines can be controlled through the combination of ``show_grid`` and ``gridstyle`` parameters. The ``gridstyle`` allows specifying a number of options including:\n\n* ``grid_line_color``\n* ``grid_line_alpha``\n* ``grid_line_dash``\n* ``grid_line_width``\n* ``grid_bounds``\n* ``grid_band``\n\nThese options may also be applied to minor grid lines by prepending the ``'minor_'`` prefix and may be applied to a specific axis by replacing ``'grid_`` with ``'xgrid_'`` or ``'ygrid_'``. Here we combine some of these options to generate a complex grid pattern:\n\n\n```python\ngrid_style = {'grid_line_color': 'black', 'grid_line_width': 1.5, 'ygrid_bounds': (0.3, 0.7),\n 'minor_xgrid_line_color': 'lightgray', 'xgrid_line_dash': [4, 4]}\n\nhv.Points(np.random.rand(10, 2)).opts(gridstyle=grid_style, show_grid=True, size=5, width=600)\n```", "start_char_idx": 2, "end_char_idx": 852, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "48fa2dcd-2723-4fc0-8e65-5091e71e00ab": {"__data__": {"id_": "48fa2dcd-2723-4fc0-8e65-5091e71e00ab", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "0d9e2ccd-9f8c-4af7-ad50-61e64905b415", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b4592ded6fb7fc3017959636de5b58066af16dfecbf3f1b77e5e81bf59d7f2aa", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "87801a5d-00b4-4797-9dc2-ce76531d3549", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "cece6e1a9bb9ca1e3cf6ec7b70345d71c032b201b5ca1510c1c36c54d2b5c8f4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "80a4fdd4-29c2-4268-953e-311f96306bee", "node_type": "1", "metadata": {}, "hash": "5675fd5b1cb24d6d34a8cdea54abeecd40ccd858ad8add83dd67e7285863c96b", "class_name": "RelatedNodeInfo"}}, "hash": "4bab6e181c1ff23b150e7a5d74c7dfa642e111ded14d5c570edf5058392f457e", "text": "Containers\n\nThe bokeh plotting extension also supports a number of additional features relating to container components.", "start_char_idx": 2, "end_char_idx": 122, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "80a4fdd4-29c2-4268-953e-311f96306bee": {"__data__": {"id_": "80a4fdd4-29c2-4268-953e-311f96306bee", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b16e0e6e-df64-4dbf-b2f3-618029aa7cf3", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "65275cf4a4c9871f201e433b65d3f269e42b4b012a971bec96c25cf5a46ccb91", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "48fa2dcd-2723-4fc0-8e65-5091e71e00ab", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "4bab6e181c1ff23b150e7a5d74c7dfa642e111ded14d5c570edf5058392f457e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "afa7f8dc-1941-423d-b661-e117863bcd8f", "node_type": "1", "metadata": {}, "hash": "21736224772a0b2dc8aedd33106446c615c31b0577fe56c85f8ac7145e048be1", "class_name": "RelatedNodeInfo"}}, "hash": "5675fd5b1cb24d6d34a8cdea54abeecd40ccd858ad8add83dd67e7285863c96b", "text": "Tabs\n\nUsing bokeh, both ``(Nd)Overlay`` and ``(Nd)Layout`` types may be displayed inside a ``tabs`` widget. This may be enabled via a plot option ``tabs``, and may even be nested inside a Layout.\n\n\n```python\nx,y = np.mgrid[-50:51, -50:51] * 0.1\n\nimg = hv.Image(np.sin(x**2+y**2), bounds=(-1,-1,1,1))\n(img.relabel('Image') * img.sample(x=0).relabel('Cross-section')).opts(tabs=True)\n```\n\nAnother reason to use ``tabs`` is that some Layout combinations may not be able to be displayed directly using HoloViews. For example, it is not currently possible to display a ``GridSpace`` as part of a ``Layout`` in any backend, and this combination will automatically switch to a ``tab`` representation for the bokeh backend.", "start_char_idx": 2, "end_char_idx": 717, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "afa7f8dc-1941-423d-b661-e117863bcd8f": {"__data__": {"id_": "afa7f8dc-1941-423d-b661-e117863bcd8f", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b7ab3ceb-563c-4913-9464-4179fe848687", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b5c380fe30db9a2c506783dc1591b43728a08f22b1ec1f6c5c766175d9b55be4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "80a4fdd4-29c2-4268-953e-311f96306bee", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5675fd5b1cb24d6d34a8cdea54abeecd40ccd858ad8add83dd67e7285863c96b", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "efe94952-b0e1-4aca-83c9-2e9dcadad8be", "node_type": "1", "metadata": {}, "hash": "83fe0529761954ae991592b36680954f39aa08f10668332ae948ea44aaf57288", "class_name": "RelatedNodeInfo"}}, "hash": "21736224772a0b2dc8aedd33106446c615c31b0577fe56c85f8ac7145e048be1", "text": "Interactive Legends\n\n\n\nWhen using ``NdOverlay`` and ``Overlay`` containers each element will get a legend entry, which can be used to interactively toggle the visibility of the element. In this example we will create a number of ``Histogram`` elements each with a different mean. By setting a ``muted_fill_alpha`` we can define the style of the element when it is de-selected using the legend, simply try tapping on each legend entry to see the effect:\n\n\n```python\nhv.NdOverlay({i: hv.Histogram(np.histogram(np.random.randn(100)+i*2)) for i in range(5)}).opts(\n 'Histogram', width=600, alpha=0.8, muted_fill_alpha=0.1)\n```\n\nThe other ``muted_`` options can be used to define other aspects of the Histogram style when it is unselected.\n\nIf you have multiple plots in a ``Layout`` with the same legend label, muting one of them will automatically mute all of them. \n\n\n```python\noverlay1 = hv.Curve([0, 0], label=\"A\") * hv.Curve([1, 1], label=\"B\")\noverlay2 = hv.Curve([2, 2], label=\"A\") * hv.Curve([3, 3], label=\"B\")\nlayout = overlay1 + overlay2\nlayout \n```\n\nIf you want to turn off this behavior, use ``.opts(sync_legends=False)``\n\n\n```python\nlayout.opts(sync_legends=False)\n```\n\nIf you want to control the number of legend shown in the ``Layout`` or the position of them ``show_legends`` and ``legend_position`` can be used.\n\n\n```python\nlayout.opts(sync_legends=True, show_legends=0, legend_position=\"top_left\")\n```", "start_char_idx": 2, "end_char_idx": 1477, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "efe94952-b0e1-4aca-83c9-2e9dcadad8be": {"__data__": {"id_": "efe94952-b0e1-4aca-83c9-2e9dcadad8be", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7408c28e-615f-4601-8770-be762f23a934", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "999ea5022b5f25807babcba08c1c7771498d410083f054819b07c305dc291329", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "afa7f8dc-1941-423d-b661-e117863bcd8f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "21736224772a0b2dc8aedd33106446c615c31b0577fe56c85f8ac7145e048be1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "f0561b9e-2be3-4814-a2e1-a980bd9a590d", "node_type": "1", "metadata": {}, "hash": "329d03cf0ffc0ec2300381e38f343bcfd239fa16ad8814e02d70687f4d4f89b5", "class_name": "RelatedNodeInfo"}}, "hash": "83fe0529761954ae991592b36680954f39aa08f10668332ae948ea44aaf57288", "text": "Marginals\n\n\nThe Bokeh backend also supports marginal plots to generate adjoined plots. The most convenient way to build an AdjointLayout is with the ``.hist()`` method.\n\n\n```python\npoints = hv.Points(np.random.randn(500,2))\npoints.hist(num_bins=51, dimension=['x','y'])\n```\n\nWhen the histogram represents a quantity that is mapped to a value dimension with a corresponding colormap, it will automatically share the colormap, making it useful as a colorbar for that dimension as well as a histogram.\n\n\n```python\nimg.hist(num_bins=100, dimension=['x', 'y'], weight_dimension='z', mean_weighted=True) +\\\nimg.hist(dimension='z')\n```", "start_char_idx": 2, "end_char_idx": 630, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "f0561b9e-2be3-4814-a2e1-a980bd9a590d": {"__data__": {"id_": "f0561b9e-2be3-4814-a2e1-a980bd9a590d", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "fa224d56-8f1d-40c3-a7ee-63f70e65b5d8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "62b27a7909f3192b4ed653bedf0174749b8740980d350688b6e4c66083315fb8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "efe94952-b0e1-4aca-83c9-2e9dcadad8be", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "83fe0529761954ae991592b36680954f39aa08f10668332ae948ea44aaf57288", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5760f215-dfce-4ef9-8b8e-f578a9e71355", "node_type": "1", "metadata": {}, "hash": "8710b35d47787e8e3d99ef1642efa5213599ac940fa1629f3d64ecefe85211f3", "class_name": "RelatedNodeInfo"}}, "hash": "329d03cf0ffc0ec2300381e38f343bcfd239fa16ad8814e02d70687f4d4f89b5", "text": "Tools\n\nBokeh provides a range of tools to interact with a plot and HoloViews adds a number of tools by default but also makes it easy to add additional tools. The ``default_tools`` define the list of tools that are added automatically and usually a user would override only the ``tools`` option to add additional tools. By default the ``default_tools`` include:\n\n ['save', 'pan', 'wheel_zoom', 'box_zoom', 'reset']", "start_char_idx": 2, "end_char_idx": 419, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5760f215-dfce-4ef9-8b8e-f578a9e71355": {"__data__": {"id_": "5760f215-dfce-4ef9-8b8e-f578a9e71355", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "77a812ff-dd68-4700-afc9-5e591bcc95d8", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f563456603f3373aafb0e08a0658d4a3b4ed54e6894c8aa1e2ffc85ae93b09c3", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "f0561b9e-2be3-4814-a2e1-a980bd9a590d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "329d03cf0ffc0ec2300381e38f343bcfd239fa16ad8814e02d70687f4d4f89b5", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "45eddd57-37dd-4074-8186-317239ca08c6", "node_type": "1", "metadata": {}, "hash": "dba7e42e8948093f49b8cf45c7d395ee498be78967424570bd6782009d0c46e1", "class_name": "RelatedNodeInfo"}}, "hash": "8710b35d47787e8e3d99ef1642efa5213599ac940fa1629f3d64ecefe85211f3", "text": "Toolbar\n\nThe bokeh toolbar is added automatically and will be placed to the right for a single plot and on the top for a layout. Additionally for layouts of plots it will automatically merge the toolbars to avoid crowding the plot. However both behaviors can be customized, the toolbar can be hidden or moved to a different location on a plot by setting the ``toolbar`` option to one of:\n\n ['above', 'below', 'left', 'right', 'disable', None]\n\nSecondly a layout or grid plot supports the ``merge_tools`` option which can be used to maintain one toolbar per plot:\n\n\n```python\n(hv.Curve([1, 2, 3]).opts(toolbar='above') + hv.Curve([1, 2, 3]).opts(toolbar=None)).opts(merge_tools=False)\n```", "start_char_idx": 2, "end_char_idx": 692, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "45eddd57-37dd-4074-8186-317239ca08c6": {"__data__": {"id_": "45eddd57-37dd-4074-8186-317239ca08c6", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "24b0d051-5e56-4af0-b663-04178fd008aa", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8a725b605d427ab5d8aec25c719ea84b3db29116eb603a448d40a69e4ac410d1", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5760f215-dfce-4ef9-8b8e-f578a9e71355", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "8710b35d47787e8e3d99ef1642efa5213599ac940fa1629f3d64ecefe85211f3", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "087b5862-ca70-4e63-bd4a-ed45884347b0", "node_type": "1", "metadata": {}, "hash": "b5f8ac15d114376d1fdc8ba0f525c67f4a7856a5de0bce9a032242cd011d0602", "class_name": "RelatedNodeInfo"}}, "hash": "dba7e42e8948093f49b8cf45c7d395ee498be78967424570bd6782009d0c46e1", "text": "Hover tools\n\nSome Elements allow revealing additional data by hovering over the data. To enable the hover tool, simply supply ``'hover'`` as a list to the ``tools`` plot option. By default the tool will display information for all the dimensions specified on the element:\n\n\n```python\nerror = np.random.rand(100, 3)\nheatmap_data = {(chr(65+i), chr(97+j)):i*j for i in range(5) for j in range(5) if i!=j}\ndata = [np.random.normal() for i in range(10000)]\nhist = np.histogram(data, 20)\n\npoints = hv.Points(error)\nheatmap = hv.HeatMap(heatmap_data).sort()\nhistogram = hv.Histogram(hist)\nimage = hv.Image(np.random.rand(50,50))\n\n(points + heatmap + histogram + image).opts(\n opts.Points(tools=['hover'], size=5), opts.HeatMap(tools=['hover']),\n opts.Image(tools=['hover']), opts.Histogram(tools=['hover']),\n opts.Layout(shared_axes=False)).cols(2)\n```\n\nAdditionally, you can provide `'vline'`, the equivalent of passing `HoverTool(mode='vline')`, or `'hline'` to set the hit-testing behavior\n\n\n```python\nerror = np.random.rand(100, 3)\nheatmap_data = {(chr(65+i), chr(97+j)):i*j for i in range(5) for j in range(5) if i!=j}\ndata = [np.random.normal() for i in range(10000)]\nhist = np.histogram(data, 20)\n\npoints = hv.Points(error)\nheatmap = hv.HeatMap(heatmap_data).sort()\nhistogram = hv.Histogram(hist)\nimage = hv.Image(np.random.rand(50,50))\n\n(points + heatmap + histogram + image).opts(\n opts.Points(tools=['hline'], size=5), opts.HeatMap(tools=['hover']),\n opts.Image(tools=['vline']), opts.Histogram(tools=['hover']),\n opts.Layout(shared_axes=False)).cols(2)\n```\n\nIt is also possible to explicitly declare the columns to display by manually constructing a `HoverTool` and declaring the tooltips as a list of tuples of the labels and a specification of the dimension name and how to display it (for a complete reference see the bokeh user guide).\n\n\n```python\nfrom bokeh.models import HoverTool\nfrom bokeh.sampledata.periodic_table import elements\n\npoints = hv.Points(\n elements, ['electronegativity', 'density'],\n ['name', 'symbol', 'metal', 'CPK', 'atomic radius']\n).sort('metal')\n\ntooltips = [\n ('Name', '@name'),\n ('Symbol', '@symbol'),\n ('CPK', '$color[hex, swatch]:CPK')\n]\nhover = HoverTool(tooltips=tooltips)\n\npoints.opts(\n tools=[hover], color='metal', cmap='Category20',\n line_color='black', size=dim('atomic radius')/10,\n width=600, height=400, show_grid=True,\n title='Chemical Elements by Type (scaled by atomic radius)')\n```", "start_char_idx": 2, "end_char_idx": 2480, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "087b5862-ca70-4e63-bd4a-ed45884347b0": {"__data__": {"id_": "087b5862-ca70-4e63-bd4a-ed45884347b0", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "a026c818-cec2-4271-a184-538f202b1587", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "bea2b1b016de51b372debb2d015e02923a25328d9f746d5db71f44eafe463bc4", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "45eddd57-37dd-4074-8186-317239ca08c6", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "dba7e42e8948093f49b8cf45c7d395ee498be78967424570bd6782009d0c46e1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "4cbbc670-2b34-47fc-8ede-1a810936cfd5", "node_type": "1", "metadata": {}, "hash": "2306313a2a22e58d0b637d486eed4a530f5afcdda265513e99e3e7f4a6b4deda", "class_name": "RelatedNodeInfo"}}, "hash": "b5f8ac15d114376d1fdc8ba0f525c67f4a7856a5de0bce9a032242cd011d0602", "text": "Selection tools\n\nBokeh provides a number of tools for selecting data points including ``tap``, ``box_select``, ``lasso_select`` and ``poly_select``. To distinguish between selected and unselected data points we can also control the color and alpha of the ``selection`` and ``nonselection`` points. You can try out any of these selection tools and see how the plot is affected:\n\n\n```python\nhv.Points(error).opts(\n color='blue', nonselection_color='red', size=10, tools=['box_select', 'lasso_select', 'tap'])\n```", "start_char_idx": 2, "end_char_idx": 516, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "4cbbc670-2b34-47fc-8ede-1a810936cfd5": {"__data__": {"id_": "4cbbc670-2b34-47fc-8ede-1a810936cfd5", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7722b446-8976-43f2-91f5-30fe6c14a7cb", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "43e1cc29ba2665961b0c26fe6d815de97e5fe18f0afc3f59aa9f518c5e2f11d8", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "087b5862-ca70-4e63-bd4a-ed45884347b0", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b5f8ac15d114376d1fdc8ba0f525c67f4a7856a5de0bce9a032242cd011d0602", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "cfc559de-ab39-4341-b488-7672dc17ddd2", "node_type": "1", "metadata": {}, "hash": "9f150884f6686db2674a43c01c1af4f5beaab3ffaedf24f47a69e2f9adfd2d4a", "class_name": "RelatedNodeInfo"}}, "hash": "2306313a2a22e58d0b637d486eed4a530f5afcdda265513e99e3e7f4a6b4deda", "text": "Selection tool with shared axes and linked brushing\n\nWhen dealing with complex multi-variate data it is often useful to explore interactions between variables across plots. HoloViews will automatically link the data sources of plots in a Layout if they draw from the same data, allowing for both linked axes and brushing.\n\nWe'll see what this looks like in practice using a small dataset of macro-economic data:\n\n\n```python\nmacro_df = pd.read_csv('http://assets.holoviews.org/macro.csv', sep='\\t')\n```\n\nBy creating two ``Points`` Elements, which both draw their data from the same pandas DataFrame, the two plots become automatically linked. Note that the Linking Plots user guide provides a more explicit way to declare two elements as being linked without having to share the same underlying datastructure. The automated linking behavior can be toggled with the ``shared_datasource`` plot option on a ``Layout`` or ``GridSpace``. You can try selecting data in one plot, and see how the corresponding data (those on the same rows of the DataFrame, even if the plots show different data, will be highlighted in each. \n\n\n```python\n(hv.Scatter(macro_df, 'year', 'gdp') + hv.Scatter(macro_df, 'gdp', 'unem')).opts(\n opts.Scatter(tools=['box_select', 'lasso_select']), opts.Layout(shared_axes=True, shared_datasource=True))\n```\n\nA gridmatrix is a clear use case for linked plotting. This operation plots any combination of numeric variables against each other, in a grid, and selecting datapoints in any plot will highlight them in all of them. Such linking can thus reveal how values in a particular range (e.g. very large outliers along one dimension) relate to each of the other dimensions.\n\n\n```python\ntable = hv.Dataset(macro_df, kdims=['year', 'country'])\nmatrix = hv.operation.gridmatrix(table.groupby('country'))\n\nmatrix.select(country=['West Germany', 'United Kingdom', 'United States']).opts(\n opts.Scatter(tools=['box_select', 'lasso_select', 'hover'], border=0))\n```", "start_char_idx": 2, "end_char_idx": 1985, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "cfc559de-ab39-4341-b488-7672dc17ddd2": {"__data__": {"id_": "cfc559de-ab39-4341-b488-7672dc17ddd2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "50c71383-445f-476a-9e13-313051bb71f6", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "15e1cd2f04aab33e3861e83fc380b7e75464dee92b58625be8761969662a2b37", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "4cbbc670-2b34-47fc-8ede-1a810936cfd5", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "2306313a2a22e58d0b637d486eed4a530f5afcdda265513e99e3e7f4a6b4deda", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "5a27f2de-e70f-4b35-a538-af6e3f6285fd", "node_type": "1", "metadata": {}, "hash": "fda9f0e93d884d2f3f454ec3b9dfa560ccd1b3dbf855399898fb0706ce34f8e9", "class_name": "RelatedNodeInfo"}}, "hash": "9f150884f6686db2674a43c01c1af4f5beaab3ffaedf24f47a69e2f9adfd2d4a", "text": "Drawing Tools\n\nAnother commonly useful set of tools are the drawing tools which are integrated with the linked streams introduced in the Custom Interactivity guide. These tools allow drawing and annotating a plot and accessing the annotation back in Python. The available drawing tools include:\n\n* PointDraw: The ``PointDraw`` stream adds a bokeh tool to the source plot, which allows drawing, dragging and deleting points.\n* BoxEdit: The ``BoxEdit`` stream adds a bokeh tool to the source plot, which allows drawing, dragging and deleting boxes.\n* FreehandDraw: The ``FreehandDraw`` stream adds a bokeh tool to the source plot, which allows freehand drawing on the plot canvas\n* PolyDraw: The ``PolyDraw`` stream adds a bokeh tool to the source plot, which allows drawing, dragging and deleting polygons and paths.\n* PolyEdit: The ``PolyEdit`` stream adds a bokeh tool to the source plot, which allows drawing, dragging and deleting vertices on polygons and paths.\n\nEach of the reference notebooks explains the tools in more detail but to get an of how these tools work see the ``FreehandDraw`` example below, which allows drawing on the canvas and accessing the drawn data from Python:\n\n\n```python\npath = hv.Path([])\nfreehand = hv.streams.FreehandDraw(source=path, num_objects=3)\n\npath.opts(\n opts.Path(active_tools=['freehand_draw'], height=400, line_width=10, width=400))\n```\n\nTo access the data from Python, you can access the ``element`` property on the stream, which lets us access each drawn line drawn as a separate ``Path`` element:\n\n\n```python\nfreehand.element.split()\n```\n\nThe Reference Gallery shows examples of all the Elements supported for Bokeh, in a format that can be compared with the corresponding matplotlib versions.", "start_char_idx": 2, "end_char_idx": 1744, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "5a27f2de-e70f-4b35-a538-af6e3f6285fd": {"__data__": {"id_": "5a27f2de-e70f-4b35-a538-af6e3f6285fd", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "7e76d3e2-ec80-47c6-b548-8057b2f7a0d1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "f94389efbba0037f568da38b3ea4991ef769401532123725406391265c07c1d5", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "cfc559de-ab39-4341-b488-7672dc17ddd2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9f150884f6686db2674a43c01c1af4f5beaab3ffaedf24f47a69e2f9adfd2d4a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "7b7a67c7-4d05-490f-9db8-c7ebc2e75ca9", "node_type": "1", "metadata": {}, "hash": "14dc47ce1464450f191107b8bf9aadecc19a62f05bfe2003dc2ffb26bf4ef059", "class_name": "RelatedNodeInfo"}}, "hash": "fda9f0e93d884d2f3f454ec3b9dfa560ccd1b3dbf855399898fb0706ce34f8e9", "text": "Theming\n\nBokeh supports theming via the Theme object object which can also be using in HoloViews. Applying a Bokeh theme is useful when you need to set detailed aesthetic options not directly exposed via the HoloViews style options.\n\nTo apply a Bokeh theme, you will need to create a ``Theme`` object:\n\n\n```python\nfrom bokeh.themes.theme import Theme\n\ntheme = Theme(\n json={\n 'attrs' : {\n 'Figure' : {\n 'background_fill_color': '#2F2F2F',\n 'border_fill_color': '#2F2F2F',\n 'outline_line_color': '#444444',\n },\n 'Grid': {\n 'grid_line_dash': [6, 4],\n 'grid_line_alpha': .3,\n },\n\n 'Axis': {\n 'major_label_text_color': 'white',\n 'axis_label_text_color': 'white',\n 'major_tick_line_color': 'white',\n 'minor_tick_line_color': 'white',\n 'axis_line_color': \"white\"\n }\n }\n})\n```\n\nInstead of supplying a JSON object, you can also create a Bokeh ``Theme`` object from a YAML file. Once the ``Theme`` object is created, you can apply it by setting it on the ``theme`` parameter of the current Bokeh renderer:\n\n\n```python\nhv.renderer('bokeh').theme = theme\n```\n\nThe theme will then be applied to subsequent plots:\n\n\n```python\nxs = np.linspace(0, np.pi*4, 100)\nhv.Curve((xs, np.sin(xs)), label='foo').opts(bgcolor='grey')\n```\n\nYou may also supply a name from Bokeh's built-in-themes:\n\n\n```python\nhv.renderer('bokeh').theme = 'light_minimal'\nxs = np.linspace(0, np.pi*4, 100)\nhv.Curve((xs, np.sin(xs)), label='foo')\n```\n\nTo disable theming, you can set the ``theme`` parameter on the Bokeh renderer to ``None``.", "start_char_idx": 2, "end_char_idx": 1659, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "7b7a67c7-4d05-490f-9db8-c7ebc2e75ca9": {"__data__": {"id_": "7b7a67c7-4d05-490f-9db8-c7ebc2e75ca9", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "e06707f3-429c-4756-9acf-009249f34c31", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d0961b32e560e1a37237ede869c0dbd01840facbea71bb1b17d5cd2dd678d573", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "5a27f2de-e70f-4b35-a538-af6e3f6285fd", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "fda9f0e93d884d2f3f454ec3b9dfa560ccd1b3dbf855399898fb0706ce34f8e9", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a3dd2cd3-0092-466d-9e01-8cf9ca19dc6d", "node_type": "1", "metadata": {}, "hash": "42a78835c3c32d6a639246eb373ed1b4d2be06783552ec5a6fa619e91ee485f1", "class_name": "RelatedNodeInfo"}}, "hash": "14dc47ce1464450f191107b8bf9aadecc19a62f05bfe2003dc2ffb26bf4ef059", "text": "Plotting with Matplotlib\n\nThe default plotting extension for HoloViews until a 2.0 release is Matplotlib when HoloViews will start defaulting to Bokeh (see the Plotting with Bokeh user guide).\n\nWhile the ``'bokeh'`` backend provides many useful interactive features, the ``'matplotlib'`` plotting extension is well suited to static exports for printed figures and because matplotlib is very full featured allows. To enable the ``'matplotlib'`` backend, we can initialize the Holoviews notebook extension:\n\n\n```python\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\n\nhv.extension('matplotlib')\n```", "start_char_idx": 2, "end_char_idx": 619, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a3dd2cd3-0092-466d-9e01-8cf9ca19dc6d": {"__data__": {"id_": "a3dd2cd3-0092-466d-9e01-8cf9ca19dc6d", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "293fb481-66fd-43a0-a9b1-239ccef84484", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5f3fcfba4a019cec903d605b7f96d29bc81a2b1d64cd46da607707510ee32430", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "7b7a67c7-4d05-490f-9db8-c7ebc2e75ca9", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "14dc47ce1464450f191107b8bf9aadecc19a62f05bfe2003dc2ffb26bf4ef059", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a8aed61a-6b49-417f-98bc-13706f0152d2", "node_type": "1", "metadata": {}, "hash": "3a29436e1d5e852e099b0a80bb1318511d09d383c5527497f275d311b31db4f8", "class_name": "RelatedNodeInfo"}}, "hash": "42a78835c3c32d6a639246eb373ed1b4d2be06783552ec5a6fa619e91ee485f1", "text": "Working with matplotlib directly\n\nWhen HoloViews outputs matplotlib plots it creates and manipulates a matplotlib Figure, axes and artists in the background. If at any time you need access to the underlying matplotlib representation of an object you can use the ``hv.render`` function to convert it. For example let us convert a HoloViews ``Image`` to a matplotlib Figure, which will let us access and modify every aspect of the plot:\n\n\n```python\nimg = hv.Image(np.random.rand(10, 10))\n\nfig = hv.render(img)\n\nprint('Figure: ', fig)\nprint('Axes: ', fig.axes)\n```", "start_char_idx": 2, "end_char_idx": 565, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a8aed61a-6b49-417f-98bc-13706f0152d2": {"__data__": {"id_": "a8aed61a-6b49-417f-98bc-13706f0152d2", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "93148f7d-ab81-4775-9ecd-fe878379d8e0", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "57b15aff92a378cd345700f4d845d05e0482935441a5ffb08424e7f79e4ae541", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a3dd2cd3-0092-466d-9e01-8cf9ca19dc6d", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "42a78835c3c32d6a639246eb373ed1b4d2be06783552ec5a6fa619e91ee485f1", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "c1921b77-d928-4524-9ac2-4a2a7ca9a906", "node_type": "1", "metadata": {}, "hash": "0d2fb1a0469ba1a4494891354e6417e185593169cde2801526f1d7bb240cda5a", "class_name": "RelatedNodeInfo"}}, "hash": "3a29436e1d5e852e099b0a80bb1318511d09d383c5527497f275d311b31db4f8", "text": "Setting Backend Opts\n\nHoloViews does not expose every single option from matplotlib.\n\nInstead, HoloViews allow users to attach hooks to modify the plot object directly--but writing these hooks could be cumbersome, especially if it's only used for a single line of update.\n\nFortunately, HoloViews allows `backend_opts` for the Bokeh backend to configure options by declaring a dictionary with accessor specification for updating the plot components.\n\nFor example, here's how to remove the frame on the legend.\n\n\n```python\nplot = hv.Curve([1, 2, 3], label=\"a\") * hv.Curve([1, 4, 9], label=\"b\")\nplot.opts(\n show_legend=True,\n backend_opts={\n \"legend.frame_on\": False,\n }\n)\n```\n\nThe following is the equivalent, as a hook.\n\n\n```python\ndef hook(plot, element):\n legend = plot.handles[\"legend\"]\n legend.set_frame_on(False)\n\nplot = hv.Curve([1, 2, 3], label=\"a\") * hv.Curve([1, 4, 9], label=\"b\")\nplot.opts(\n show_legend=True,\n hooks=[hook]\n)\n```\n\nNotice how much more concise it is with `backend_opts`, and it's even possible to update items in a list.\n\nFor example you can set the first legend label's `fontsize`!\n\n\n```python\nplot = hv.Curve([1, 2, 3], label=\"a\") * hv.Curve([1, 4, 9], label=\"b\")\nplot.opts(\n show_legend=True,\n backend_opts={\"legend.get_texts()[0:2].fontsize\": 18}\n)\n```\n\nWith knowledge of the methods in matplotlib, it's possible to configure many other plot components besides `legend`. Some examples include `colorbar`, `xaxis`, `yaxis`, and much, much more.\n\nIf you're unsure, simply input your best guess and it'll try to provide a list of suggestions if there's an issue.", "start_char_idx": 2, "end_char_idx": 1624, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "c1921b77-d928-4524-9ac2-4a2a7ca9a906": {"__data__": {"id_": "c1921b77-d928-4524-9ac2-4a2a7ca9a906", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "b4f2862f-a9ad-4c94-8737-2e7a049d87bc", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5511cb82b1ba666cfef8b0bd2a46b3d6e89c2b7057010cd363bb02a1baeeeb76", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a8aed61a-6b49-417f-98bc-13706f0152d2", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "3a29436e1d5e852e099b0a80bb1318511d09d383c5527497f275d311b31db4f8", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "75e48af6-52c5-466b-9be1-c4414c4d3dca", "node_type": "1", "metadata": {}, "hash": "5c655c03e20ed33d7276b80e517c21a8c0d42291d35e04d715dd0374d956f986", "class_name": "RelatedNodeInfo"}}, "hash": "0d2fb1a0469ba1a4494891354e6417e185593169cde2801526f1d7bb240cda5a", "text": "Static file format\n\nMatplotlib supports a wide range of export formats suitable for both web and print publishing. During interactive exploration in the Notebook, your results are always visible within the notebook itself, and usually png plots are good enough. To switch the default file format you can use the ``hv.output`` utility and control set ``fig`` option, supported formats include:\n\n ['png', 'svg', 'pdf']\n \nhowever pdf output is not supported in the notebook. To demonstrate let us switch output to SVG:\n\n\n```python\nhv.output(fig='svg')\n```\n\nNow when we create a plot in the notebook the output will be rendered as SVGs:\n\n\n```python\nfrom holoviews.operation import contours\n\nx = y = np.arange(-3.0, 3.0, 0.1)\nX, Y = np.meshgrid(x, y) \n\ndef g(x,y,c):\n return 2*((x-y)**2/(x**2+y**2)) + np.exp(-(np.sqrt(x**2+y**2)-c)**2)\n\nimg = hv.Image(g(X,Y,2))\nfilled_contours = contours(img, filled=True)\n\nfilled_contours\n```\n\nThe ``hv.save`` function allows exporting plots to all supported formats simply by changing the file extension. Certain formats support additional options, e.g. for png export we can also specify the ``dpi`` (dots per inch):\n\n\n```python\nhv.save(filled_contours, 'contours.png', dpi=144)\n```\n\nTo confirm the plot was exported correctly we can load it back in using IPython's Image object:\n\n\n```python\nfrom IPython.display import Image\nImage('contours.png', width=400)\n```\n\nFor a publication, you will usually want to select SVG format by changing the file extension, because this vector format preserves the full resolution of all text and drawing elements. SVG files can be be used in some document preparation programs directly (e.g. LibreOffice), and can easily be converted using e.g. Inkscape to PDF for use with PDFLaTeX or to EMF for use with Microsoft Word. They can also be edited using Inkscape or other vector drawing programs to move graphical elements around, add arbitrary text, etc., if you need to make final tweaks before using the figures in a document. You can also embed them within other SVG figures in such a drawing program, e.g. by creating a larger figure as a template that automatically incorporates multiple SVG files you have exported separately.", "start_char_idx": 2, "end_char_idx": 2213, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "75e48af6-52c5-466b-9be1-c4414c4d3dca": {"__data__": {"id_": "75e48af6-52c5-466b-9be1-c4414c4d3dca", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "84658b36-c79b-4469-ac90-00490d4aa9be", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "c71c9b6f78166678b5a3dec31e007d54ebd6402ccd376d8855ea4c8f0599a9a0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "c1921b77-d928-4524-9ac2-4a2a7ca9a906", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "0d2fb1a0469ba1a4494891354e6417e185593169cde2801526f1d7bb240cda5a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "fa73889b-0128-48e5-83ab-4cdf51227757", "node_type": "1", "metadata": {}, "hash": "5ca12008610f4cd56ddd3f74aa517585e308c75c8e71f2f5ee254483d782bf03", "class_name": "RelatedNodeInfo"}}, "hash": "5c655c03e20ed33d7276b80e517c21a8c0d42291d35e04d715dd0374d956f986", "text": "Animation support\n\nThe ``'matplotlib'`` backend supports animated outputs either as video (using mp4 or webm formats) or as animated GIFS. This is useful for output to web pages that users can view without needing to interact with. It can also be useful for creating descriptive pages for HoloViews constructs that require a live Python/Jupyter server rather than just a web page - see for example DynamicMap.", "start_char_idx": 2, "end_char_idx": 412, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "fa73889b-0128-48e5-83ab-4cdf51227757": {"__data__": {"id_": "fa73889b-0128-48e5-83ab-4cdf51227757", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "d10ffb11-6f31-4e99-a55f-cfae9cf20e92", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "b3e21b0bc0938fbbe59805385091fd9e272e04a9fd63498a0e49dc92f521a14e", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "75e48af6-52c5-466b-9be1-c4414c4d3dca", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5c655c03e20ed33d7276b80e517c21a8c0d42291d35e04d715dd0374d956f986", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "e73d7424-6bef-41f2-a14a-2a58b8910b2a", "node_type": "1", "metadata": {}, "hash": "a175125023427cc28b325da7bb8089bcb6face92ba9cf2ebac0dcc53169f8a8a", "class_name": "RelatedNodeInfo"}}, "hash": "5ca12008610f4cd56ddd3f74aa517585e308c75c8e71f2f5ee254483d782bf03", "text": "GIF\n\nIn recent versions of matplotlib (>=2.2.0) GIF output can also be generated using pillow, which is what HoloViews uses by default. The pillow dependency can be installed using conda or pip using: ``conda install pillow`` or ``pip install pillow``.\n\nTo display a plot The speed of the animation is controlled using the ``fps`` (frames per second):\n\n\n```python\nholomap = hv.HoloMap([(t, hv.Image(g(X,Y, 4 * np.sin(np.pi*t)))) for t in np.linspace(0,1,21)]).opts(\n cmap='fire', colorbar=True, show_title=False, xaxis='bare', yaxis='bare')\n\ncontour_hmap = contours(holomap, filled=True)\n\nhv.output(contour_hmap, holomap='gif', fps=5)\n```\n\nAnimated output can also be exported using the save function by changing the file extension:\n \n```python\nhv.save(contour_hmap, 'holomap.gif', fps=5)\n```", "start_char_idx": 2, "end_char_idx": 800, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "e73d7424-6bef-41f2-a14a-2a58b8910b2a": {"__data__": {"id_": "e73d7424-6bef-41f2-a14a-2a58b8910b2a", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "9c058290-79b4-44af-b517-d4454d585c7a", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "d0e9e855289b5e9c3598ffb837b72c1da60a56d0de50947254a7953fb6fbcaea", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "fa73889b-0128-48e5-83ab-4cdf51227757", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5ca12008610f4cd56ddd3f74aa517585e308c75c8e71f2f5ee254483d782bf03", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "a5a300a4-e068-420a-9a32-c516d43be820", "node_type": "1", "metadata": {}, "hash": "5b1fc255e5edcb16ab8e1fa2fc7be51fcb2a4bc6f11cca53295ce145e6a9ed61", "class_name": "RelatedNodeInfo"}}, "hash": "a175125023427cc28b325da7bb8089bcb6face92ba9cf2ebac0dcc53169f8a8a", "text": "Videos\n\nVideo output in matplotlib depends on ffmpeg, which may be compiled from source, installed from conda using ``conda install ffmpeg``, or installed on OSX using brew using ``brew install ffmpeg``. To select video output use set the holomap format to ``'mp4'``:\n\n\n```python\nhv.output(contour_hmap, holomap='mp4', fps=5)\n```", "start_char_idx": 2, "end_char_idx": 331, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "a5a300a4-e068-420a-9a32-c516d43be820": {"__data__": {"id_": "a5a300a4-e068-420a-9a32-c516d43be820", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "928a1d11-0935-401b-bdb1-58fb2fc1ef99", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "e76168da3870ba9ae9324792e115a78acc38cb77fb2378ccffc7ffb939e8f973", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "e73d7424-6bef-41f2-a14a-2a58b8910b2a", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "a175125023427cc28b325da7bb8089bcb6face92ba9cf2ebac0dcc53169f8a8a", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "6766c844-4fdb-42dc-9416-eb8d22554a64", "node_type": "1", "metadata": {}, "hash": "9ab3487ead2761a04b53cf760d3e37877cc4976dc26912baad98fd11790b8d6e", "class_name": "RelatedNodeInfo"}}, "hash": "5b1fc255e5edcb16ab8e1fa2fc7be51fcb2a4bc6f11cca53295ce145e6a9ed61", "text": "Plot size\n\nOne of the major differences between the matplotlib extension and others is the way plot sizes work. In Plotly and Bokeh plot sizes are inside out, i.e. each plot defines its height and can then be composed together as needed, while matplotlib defines the size of the figure and the size of each subplot is relative to that. This affords greater control over plot aspect but can also make things more difficult. In HoloViews the size of a plot can be controlled using a couple of main options\n\n- **``aspect``**: Determines the aspect ratio of a subplot\n- **``fig_bounds``**: A four-tuple declaring the (left, bottom, right, top) of the plot in figure coordinates with a range of 0-1.\n- **``fig_inches``**: The size of the plot in inches can be a single which will be scaled according to the plots aspect or a tuple specifying both width and height).\n- **``fig_size``**: A percentage scaling factor.\n\nFor example assuming a dpi (dots per inch) of 72, setting ``fig_inches=5``, ``aspect=2`` and ``fig_bounds=(0, 0, 1, 1)`` should produce a plot roughly 720 pixels wide and 360 pixels in height:\n\n\n```python\nhv.output(fig='png', dpi=72)\nfilled_contours.opts(aspect=2, fig_inches=5, fig_bounds=(0, 0, 1, 1))\n```\n\nThis turns out to be not quite correct because any empty space will be clipped, e.g. the plot above is actually 603\u2006\u00d7\u2006318 pixels, however it is a good approximation.", "start_char_idx": 2, "end_char_idx": 1387, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "6766c844-4fdb-42dc-9416-eb8d22554a64": {"__data__": {"id_": "6766c844-4fdb-42dc-9416-eb8d22554a64", "embedding": null, "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "34d53bdf-a177-43b0-9b0a-582685b6d51e", "node_type": "4", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "23a14f15b4795c312cc450d159bdc777b7cbbe8f861116896acda3d35ba888c0", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "a5a300a4-e068-420a-9a32-c516d43be820", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "5b1fc255e5edcb16ab8e1fa2fc7be51fcb2a4bc6f11cca53295ce145e6a9ed61", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "96fb6cb1-3969-4d13-952c-f51d04272e1f", "node_type": "1", "metadata": {}, "hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "class_name": "RelatedNodeInfo"}}, "hash": "9ab3487ead2761a04b53cf760d3e37877cc4976dc26912baad98fd11790b8d6e", "text": "Plot layouts\n\nAnother aspect that differs quite substantially between matplotlib and other extension is the layout system. Since plots do not have an absolute size relative to one another it depends on the aspect of each plot. The main options to control the layout include:\n\n* **``aspect_weight``**: Whether to weight the aspect of plots when laying out plots (default=False).\n* **``hspace``**: Horizontal spacing between subplots.\n* **``tight``**: Whether to automatically reduce space between subplots.\n* **``vspace``**: Vertical space between subplots.\n\nFirst let us see what happens when we compose plots with different aspects, and use the ``tight`` option to reduce the vertical space between them (we could also manually reduce the ``vspace``):\n\n\n```python\nline_contours = contours(img).opts(aspect=3)\nfill_contours = filled_contours.opts(aspect=2)\n\nopts.defaults(opts.Layout(sublabel_format='', fig_size=150))\n\n(line_contours + fill_contours).opts(tight=True)\n```\n\nWe can see that the two subplots have very different heights, to equalize this we can enable the ``aspect_weight`` option, which will rescale the subplots:\n\n\n```python\n(line_contours + fill_contours).opts(aspect_weight=True, tight=True)\n```", "start_char_idx": 2, "end_char_idx": 1216, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "96fb6cb1-3969-4d13-952c-f51d04272e1f": {"__data__": {"id_": "96fb6cb1-3969-4d13-952c-f51d04272e1f", "embedding": null, "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "50d1950c-cc88-4265-94e0-7cfc604577a1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "6766c844-4fdb-42dc-9416-eb8d22554a64", "node_type": "1", "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}, "hash": "9ab3487ead2761a04b53cf760d3e37877cc4976dc26912baad98fd11790b8d6e", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "be5a4eba-9ce2-434a-89c1-d536d8b9e163", "node_type": "1", "metadata": {}, "hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "class_name": "RelatedNodeInfo"}}, "hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "text": "Generic options\n---------------\nautorange (default=None): Literal['x', 'y'] | None\n Whether to enable auto-ranging along the x- or y-axis when\n zooming. Requires HoloViews >= 1.16.\nclim: tuple\n Lower and upper bound of the color scale\ncnorm (default='linear'): str\n Color scaling which must be one of 'linear', 'log' or 'eq_hist'\ncolorbar (default=False): boolean\n Enables a colorbar\nfontscale: number\n Scales the size of all fonts by the same amount, e.g. fontscale=1.5\n enlarges all fonts (title, xticks, labels etc.) by 50%\nfontsize: number or dict\n Set title, label and legend text to the same fontsize. Finer control\n by using a dict: {'title': '15pt', 'ylabel': '5px', 'ticks': 20}\nflip_xaxis/flip_yaxis: boolean\n Whether to flip the axis left to right or up and down respectively\ngrid (default=False): boolean\n Whether to show a grid\nhover : boolean\n Whether to show hover tooltips, default is True unless datashade is\n True in which case hover is False by default\nhover_cols (default=[]): list or str\n Additional columns to add to the hover tool or 'all' which will\n includes all columns (including indexes if use_index is True).\ninvert (default=False): boolean\n Swaps x- and y-axis\nframe_width/frame_height: int\n The width and height of the data area of the plot\nlegend (default=True): boolean or str\n Whether to show a legend, or a legend position\n ('top', 'bottom', 'left', 'right')\nlogx/logy (default=False): boolean\n Enables logarithmic x- and y-axis respectively\nlogz (default=False): boolean\n Enables logarithmic colormapping\nloglog (default=False): boolean\n Enables logarithmic x- and y-axis\nmax_width/max_height: int\n The maximum width and height of the plot for responsive modes\nmin_width/min_height: int\n The minimum width and height of the plot for responsive modes\npadding: number or tuple\n Fraction by which to increase auto-ranged extents to make\n datapoints more visible around borders. Supports tuples to\n specify different amount of padding for x- and y-axis and\n tuples of tuples to specify different amounts of padding for\n upper and lower bounds.\nrescale_discrete_levels (default=True): boolean\n If `cnorm='eq_hist'` and there are only a few discrete values,\n then `rescale_discrete_levels=True` (the default) decreases\n the lower limit of the autoranged span so that the values are\n rendering towards the (more visible) top of the `cmap` range,\n thus avoiding washout of the lower values. Has no effect if\n `cnorm!=`eq_hist`.\nresponsive: boolean\n Whether the plot should responsively resize depending on the\n size of the browser. Responsive mode will only work if at\n least one dimension of the plot is left undefined, e.g. when\n width and height or width and aspect are set the plot is set\n to a fixed size, ignoring any responsive option.\nrot: number\n Rotates the axis ticks along the x-axis by the specified\n number of degrees.\nshared_axes (default=True): boolean\n Whether to link axes between plots\ntransforms (default={}): dict\n A dictionary of HoloViews dim transforms to apply before plotting\ntitle (default=''): str\n Title for the plot\ntools (default=[]): list\n List of tool instances or strings (e.g. ['tap', 'box_select'])\nxaxis/yaxis: str or None\n Whether to show the x/y-axis and whether to place it at the\n 'top'/'bottom' and 'left'/'right' respectively.\nxformatter/yformatter (default=None): str or TickFormatter\n Formatter for the x-axis and y-axis (accepts printf formatter,\n e.g.", "start_char_idx": 0, "end_char_idx": 3577, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "be5a4eba-9ce2-434a-89c1-d536d8b9e163": {"__data__": {"id_": "be5a4eba-9ce2-434a-89c1-d536d8b9e163", "embedding": null, "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "50d1950c-cc88-4265-94e0-7cfc604577a1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "96fb6cb1-3969-4d13-952c-f51d04272e1f", "node_type": "1", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "999ef27ed727088945a1d150587ce136258e303f2a89548448af0266d25750f4", "class_name": "RelatedNodeInfo"}, "3": {"node_id": "146d0616-b5d5-43f0-afcf-aa385ba1c15e", "node_type": "1", "metadata": {}, "hash": "e4284999019d8babe84c667d274b808f42360bf813fc13cbcfa2cc53b21afe6d", "class_name": "RelatedNodeInfo"}}, "hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "text": "rot: number\n Rotates the axis ticks along the x-axis by the specified\n number of degrees.\nshared_axes (default=True): boolean\n Whether to link axes between plots\ntransforms (default={}): dict\n A dictionary of HoloViews dim transforms to apply before plotting\ntitle (default=''): str\n Title for the plot\ntools (default=[]): list\n List of tool instances or strings (e.g. ['tap', 'box_select'])\nxaxis/yaxis: str or None\n Whether to show the x/y-axis and whether to place it at the\n 'top'/'bottom' and 'left'/'right' respectively.\nxformatter/yformatter (default=None): str or TickFormatter\n Formatter for the x-axis and y-axis (accepts printf formatter,\n e.g. '%.3f', and bokeh TickFormatter)\nxlabel/ylabel/clabel (default=None): str\n Axis labels for the x-axis, y-axis, and colorbar\nxlim/ylim (default=None): tuple or list\n Plot limits of the x- and y-axis\nxticks/yticks (default=None): int or list\n Ticks along x- and y-axis specified as an integer, list of\n ticks positions, or list of tuples of the tick positions and labels\nwidth (default=700)/height (default=300): int\n The width and height of the plot in pixels\nattr_labels (default=None): bool\n Whether to use an xarray object's attributes as labels, defaults to\n None to allow best effort without throwing a warning. Set to True\n to see warning if the attrs can't be found, set to False to disable\n the behavior.\nsort_date (default=True): bool\n Whether to sort the x-axis by date before plotting\nsymmetric (default=None): bool\n Whether the data are symmetric around zero. If left unset, the data\n will be checked for symmetry as long as the size is less than\n ``check_symmetric_max``.\ncheck_symmetric_max (default=1000000):\n Size above which to stop checking for symmetry by default on the data.\n\nResampling options\n------------------\naggregator (default=None):\n Aggregator to use when applying rasterize or datashade operation\n (valid options include 'mean', 'count', 'min', 'max' and more, and\n datashader reduction objects)\ndynamic (default=True):\n Whether to return a dynamic plot which sends updates on widget and\n zoom/pan events or whether all the data should be embedded\n (warning: for large groupby operations embedded data can become\n very large if dynamic=False)\ndatashade (default=False):\n Whether to apply rasterization and shading (colormapping) using\n the Datashader library, returning an RGB object instead of\n individual points\ndownsample (default=False):\n Whether to apply LTTB (Largest Triangle Three Buckets)\n downsampling to the element (note this is only well behaved for\n timeseries data). Requires HoloViews >= 1.16.\ndynspread (default=False):\n For plots generated with datashade=True or rasterize=True,\n automatically increase the point size when the data is sparse\n so that individual points become more visible\nrasterize (default=False):\n Whether to apply rasterization using the Datashader library,\n returning an aggregated Image (to be colormapped by the\n plotting backend) instead of individual points\nresample_when (default=None):\n Applies a resampling operation (datashade, rasterize or downsample) if\n the number of individual data points present in the current zoom range\n is above this threshold. The raw plot is displayed otherwise.\nx_sampling/y_sampling (default=None):\n Specifies the smallest allowed sampling interval along the x/y axis.\n\nGeographic options\n------------------\ncoastline (default=False):\n Whether to display a coastline on top of the plot, setting\n coastline='10m'/'50m'/'110m' specifies a specific scale.\ncrs (default=None):\n Coordinate reference system of the data specified as Cartopy\n CRS object, proj.4 string or EPSG code.\nfeatures (default=None): dict or list\n A list of features or a dictionary of features and the scale\n at which to render it. Available features include 'borders',\n 'coastline', 'lakes', 'land', 'ocean', 'rivers' and 'states'.\n Available scales include '10m'/'50m'/'110m'.\ngeo (default=False):\n Whether the plot should be treated as geographic (and assume\n PlateCarree, i.e. lat/lon coordinates).", "start_char_idx": 2892, "end_char_idx": 7096, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}, "146d0616-b5d5-43f0-afcf-aa385ba1c15e": {"__data__": {"id_": "146d0616-b5d5-43f0-afcf-aa385ba1c15e", "embedding": null, "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "excluded_embed_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "excluded_llm_metadata_keys": ["file_name", "file_type", "file_size", "creation_date", "last_modified_date", "last_accessed_date"], "relationships": {"1": {"node_id": "50d1950c-cc88-4265-94e0-7cfc604577a1", "node_type": "4", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "d691e5946534033f3e437161fbb7987958e87ea7b2566e2755ad6f1e32257066", "class_name": "RelatedNodeInfo"}, "2": {"node_id": "be5a4eba-9ce2-434a-89c1-d536d8b9e163", "node_type": "1", "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}, "hash": "06fb22e464cd7f11e07cb5f63110e6f540f999276bc417eeb10eb3cefb32348e", "class_name": "RelatedNodeInfo"}}, "hash": "e4284999019d8babe84c667d274b808f42360bf813fc13cbcfa2cc53b21afe6d", "text": "Geographic options\n------------------\ncoastline (default=False):\n Whether to display a coastline on top of the plot, setting\n coastline='10m'/'50m'/'110m' specifies a specific scale.\ncrs (default=None):\n Coordinate reference system of the data specified as Cartopy\n CRS object, proj.4 string or EPSG code.\nfeatures (default=None): dict or list\n A list of features or a dictionary of features and the scale\n at which to render it. Available features include 'borders',\n 'coastline', 'lakes', 'land', 'ocean', 'rivers' and 'states'.\n Available scales include '10m'/'50m'/'110m'.\ngeo (default=False):\n Whether the plot should be treated as geographic (and assume\n PlateCarree, i.e. lat/lon coordinates).\nglobal_extent (default=False):\n Whether to expand the plot extent to span the whole globe.\nproject (default=False):\n Whether to project the data before plotting (adds initial\n overhead but avoids projecting data when plot is dynamically\n updated).\nprojection (default=None): str or Cartopy CRS\n Coordinate reference system of the plot specified as Cartopy\n CRS object or class name.\ntiles (default=False):\n Whether to overlay the plot on a tile source. Tiles sources\n can be selected by name or a tiles object or class can be passed,\n the default is 'Wikipedia'.", "start_char_idx": 6366, "end_char_idx": 7686, "text_template": "{metadata_str}\n\n{content}", "metadata_template": "{key}: {value}", "metadata_seperator": "\n", "class_name": "TextNode"}, "__type__": "1"}}, "docstore/ref_doc_info": {"55405485-42c0-436f-b31c-3a0aafe29f33": {"node_ids": ["d2e509ab-4d49-4c7d-902e-0cd5579d42db"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c2164602-45b9-4aad-8d2e-3c2fa8d73647": {"node_ids": ["1048070c-750f-46b1-8c77-653c1e8bf307"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cb376bbf-00da-45c1-ad22-e9da3190b470": {"node_ids": ["ad879b28-1d5e-4062-aaae-0301cf15d6fa"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "75499e0b-f963-4ee5-b3f9-2bc40101d3e2": {"node_ids": ["a8809711-309e-4672-b940-44c8e2716efd"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f09dda05-763b-4f40-9047-da306c58a828": {"node_ids": ["2c1991a3-1a31-4e59-810b-013cc5c984cb"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2956f9de-5058-46dc-98b1-87fb1f14512f": {"node_ids": ["d1fd9238-a103-4c5a-bca2-b4fa0f2d6b59"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "044b361e-9c5e-4bfb-9543-91420862c382": {"node_ids": ["dd0917a0-7eb7-44e2-b484-52900d3cee15"], "metadata": {"file_path": "hvplot_docs/01-Annotating_Data.md", "file_name": "01-Annotating_Data.md", "file_type": null, "file_size": 9432, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "526ee412-22f6-42ff-8e69-01cc4d9fe0d8": {"node_ids": ["02aea1ac-3ade-4251-8772-816d8f812e46"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "03dbd0f1-3bf3-47f3-a603-07fed9856cbf": {"node_ids": ["1c473438-4758-4314-a28f-e75b07c9d790"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b379edd3-aa54-4f7f-b203-4275d6e084be": {"node_ids": ["895c3402-30a2-4b1f-8398-c4d8f3a152c0"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7b2fe83b-b9b5-486e-8cfe-d8b0779ceb54": {"node_ids": ["8fedda13-845a-40df-b698-350443926c6c"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0a54e6df-ad0a-41d5-bb73-b899c6c66552": {"node_ids": ["dea85efb-9113-43b1-9c54-f0fe32af8c8d"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "82782577-f92e-48ff-91a0-1df9646a035d": {"node_ids": ["fc12489c-6756-4645-ab7e-a81be33d282d"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9db166f4-1576-4cd0-a107-021ab5c6f079": {"node_ids": ["68258680-03fe-47da-b09d-68a1edc046dd"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "282b2871-1166-4e41-8a04-4fa2250ce637": {"node_ids": ["0b969a3c-509b-4307-b7fe-4648820a3dfc"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c76101c0-b876-449a-be5e-7cd9f00e80e7": {"node_ids": ["f9673153-8629-40a7-b6e5-7b4741532922"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9a703c34-2fba-409a-9ae7-0c5815de1961": {"node_ids": ["16adcce3-4846-45d7-b91b-9d1d3af3de44"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "62dd6b8c-5140-410b-99ec-9d15fcbc2edb": {"node_ids": ["aa3c2af8-5e4e-44bf-9e5b-ac1168239fd9"], "metadata": {"file_path": "hvplot_docs/02-Composing_Elements.md", "file_name": "02-Composing_Elements.md", "file_type": null, "file_size": 9545, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a437b402-f243-4124-9fcd-530b50751fcc": {"node_ids": ["8bf70482-1930-4dd8-b650-41b748306d66"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e3f136b6-1dc1-47ab-b113-f043df0d3824": {"node_ids": ["74e8937f-322b-409d-8b07-c8ec78f6afa1"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8079e14f-c345-427e-acf6-eb64636f9815": {"node_ids": ["d9b02c50-f6c0-4527-beec-e1d66ccd8552"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b8c66548-3a62-454a-acea-7d6c4917ab05": {"node_ids": ["c2da3266-5c1b-42fd-8a52-457ec8a837b4"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9eec48a3-60d7-4a50-8c2f-8b13630b4719": {"node_ids": ["8025dec0-95fd-4190-9f30-c10efdc9d9ab"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "79d60502-3ff4-46a1-b0ae-5a5afab313a5": {"node_ids": ["f057ab81-123d-48b8-b7ca-62bd53dfe7dd"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "66a2ddc4-9769-47b4-bd0d-957df08f070f": {"node_ids": ["e9b5f9b6-2e57-4c74-b1ac-b8bdba8473f2"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4f42bef6-99d6-4595-bb9f-3f59c797eeed": {"node_ids": ["0b116a34-f8e7-41a4-9df6-969f12cb8101"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a6b1a559-6520-45e1-a06c-4b37fe41b69e": {"node_ids": ["4cbaf0d2-e3ad-4a5d-a006-ad7d5a208e25"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "60d7ca39-eb78-49a5-a2f8-69097af5681a": {"node_ids": ["5252e464-9219-46a2-a24d-69a7c319d3ec"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4d0f7d40-d879-4298-972c-7744cd33bc9e": {"node_ids": ["729a1f7e-103d-4470-9421-6d7ac320bb8e"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ea6f5752-1f4a-418d-b87e-94bfdcab903b": {"node_ids": ["9c30a655-197a-4687-9381-75408bdbb341"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d96a246a-69bb-45ed-bf1a-fb7817cb55cf": {"node_ids": ["e4542bbc-a975-4a79-8766-7b1e928541de"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0db8be65-42a7-42bd-9267-2b36cab4b735": {"node_ids": ["b37be0aa-3ddf-4bd1-9623-800f82da6cf6"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5e43b865-f498-4d60-b103-c88caed0c66e": {"node_ids": ["b1028ab9-411a-4c80-9410-056ad2a89253"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8a9ca8fc-48da-4eaf-bf0a-f70ec9b8d176": {"node_ids": ["65b60eb6-7f01-48c2-baf3-04777d9b92ba"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1337696a-6c5b-44d3-80c4-90c9bb4cfdc9": {"node_ids": ["fd6adeee-e4df-4a45-bbef-15a1ad7488e8"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4f13e2c4-7e36-46bb-a420-d500d9328996": {"node_ids": ["390e51ad-8c80-4321-a564-28b0873250fa"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "95078f9a-9ca7-424e-b462-1a2d831a0edb": {"node_ids": ["b6dbdac6-f645-48ea-ae40-dde01ed5eb71"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1369b4d2-63bf-4a29-ba32-8bad2d08ef21": {"node_ids": ["fcc1ec03-0215-464e-8f07-d015c6be9c28"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2b194c57-db06-4ce2-86ca-31f52d494b63": {"node_ids": ["91162427-49f8-4a22-a05e-507566eb829a"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "28c147a8-5b06-443d-8194-8bdc7d760fc4": {"node_ids": ["49186d12-b3f2-44a9-b22f-344cd07a1f2e"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ee95fde1-095d-4a90-97f9-a3b9c11e8963": {"node_ids": ["cbfc5c75-b78b-4f6a-9bab-55d522146ab5"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1d5c8c49-ba2b-4d34-ade0-d7bd8da383d8": {"node_ids": ["da3b1a49-1e1c-421a-9e8d-3ac6fc139918"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "38355a40-a391-43c7-8f26-8bbdeca2ef38": {"node_ids": ["0732b606-9c43-4d56-9d7e-8124d8127905"], "metadata": {"file_path": "hvplot_docs/03-Applying_Customizations.md", "file_name": "03-Applying_Customizations.md", "file_type": null, "file_size": 31067, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c9500f3e-8cdd-4970-968d-1dc4fd1a7e36": {"node_ids": ["53f22986-de77-4b71-b993-385b7f27445e"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a4e16272-a9b5-41e3-ba7c-0dee4f8873e9": {"node_ids": ["426cb3b2-542f-48c6-89c1-8cab6e11be67"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cb622561-3e0f-403b-bc21-2de33a8c5df1": {"node_ids": ["b51de4d6-88ef-4e41-b235-d7ee62c10ecb"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cda9473d-6c06-43d8-9a92-bda43d75d1e7": {"node_ids": ["105abccf-3823-40ce-a0c6-f362911d849f"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "456577f6-aca4-49ed-b376-5a08c6b2e993": {"node_ids": ["b9f96fb2-a648-4e39-8fbb-247282f9606a"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "44ad086b-ae06-4352-92d8-7bb42f277317": {"node_ids": ["76866dc0-df4c-492e-a47b-bca294ecfec8"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ca00568a-ba57-4f5e-8f1e-5db12d493ef7": {"node_ids": ["704dbfb6-08d3-4fe3-99e2-80561d59d84f"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b8a42e78-b067-4d27-9b54-1f18c46da411": {"node_ids": ["c3f7fb08-8bcd-4a5c-bfae-d579d5e76a08"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "970db613-d63e-43b9-8508-fa578a9d36fe": {"node_ids": ["977e3542-db5d-4d80-b0de-6c4db042a00c"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d634312d-38ea-427e-80ad-483a9587b817": {"node_ids": ["db6a5f7a-b148-486d-ae63-83923dc2ece7"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a65274b4-74e4-4989-a1ab-19d00b668122": {"node_ids": ["b98527fa-713b-4d02-8050-59515605dbae"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f9fd5fc4-b6fd-425d-bbd4-b2e01d81abd6": {"node_ids": ["61b066c4-de2e-429d-8488-f63744d4024e"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "abcd8c71-bdcb-4ec9-bb6a-0d0c75730b20": {"node_ids": ["3fdacb27-614e-4040-b8f2-0ed0a61914cc"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "954cd817-1227-41d6-b48d-001b7f07f54c": {"node_ids": ["40035029-ff47-4f58-aac4-b97605a166ba"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a8b8d33c-4f09-4257-9abf-1b776adeb97c": {"node_ids": ["90971db5-943d-4601-97d9-50abe53e1411"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "901375ad-fe14-4238-8212-3ee953625d83": {"node_ids": ["5492b41a-f1e7-4678-8b83-81354a2810ab"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4b294cc8-2db0-43c1-bbbb-f1491070f67b": {"node_ids": ["daaadde5-3a03-42a3-a65e-1fd36ba4cc1b"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a9b114ad-0039-4d8d-822d-a573af279002": {"node_ids": ["f345421c-d17e-4490-92ec-b72ee40a72c8"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "37a712a3-b2d8-4781-99ac-ea6d1fb3c2f8": {"node_ids": ["ce5b09a1-105f-4de1-8639-100058cae41e"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e7d3ebff-1975-447b-a165-f28ade396ddc": {"node_ids": ["90404a2f-346a-44ed-9e86-664a43c3ee62"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "128938f1-3816-4f5c-8ef2-0ff3d9e07aae": {"node_ids": ["48af193b-bcf6-4c8c-a995-cfed245014c7"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6a83f03f-375c-411c-8fda-9dbe5be1af42": {"node_ids": ["3364e705-40c2-436a-977d-73241ab7c9e6"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5c149c1f-e615-4ab2-a761-4519d5667d26": {"node_ids": ["a5d6c4b3-f107-439b-94e3-20946aba7cad"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e05eddbe-fba2-4889-a7f1-8264b84a1402": {"node_ids": ["bc4421e2-1556-4c3e-897d-544d4bb9a7ae"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "78bd63f9-3645-4535-8e06-6ca17dd50e73": {"node_ids": ["bc41c31b-fd5c-4729-becf-0063f969885a"], "metadata": {"file_path": "hvplot_docs/04-Style_Mapping.md", "file_name": "04-Style_Mapping.md", "file_type": null, "file_size": 20129, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "faa439a6-e9a5-4127-ae38-4ad049af31fd": {"node_ids": ["743b1bfe-6967-4c76-bc26-4cc5c442c7b8"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cf590306-fff5-496c-acda-56abb66b726a": {"node_ids": ["66912124-c458-4429-b537-682009940df8"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8bdfe187-67ac-49d8-bee4-8f4f3958c581": {"node_ids": ["849cfeb4-e3a7-48c6-8e08-e9bb70e22418"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0cafb10b-b577-49e1-b565-eb9c3c830c39": {"node_ids": ["198d7494-ff6f-4b5c-9087-b48afa279a16"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9e50b097-2746-4afa-8bb3-fe9839b30d78": {"node_ids": ["53e769eb-00a6-4ee5-a95f-a7e61037bddd"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "17e8212c-e9b6-453e-831f-854b3543a430": {"node_ids": ["9d0c0b2b-7e0d-4733-8b74-6a9673a149c3"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f0a99e96-b455-443c-b9de-922fdd39a6f5": {"node_ids": ["a6d53204-f04a-43d9-9edd-cb6cb61338c7"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9b92ef93-0802-4512-8762-88ac51492d41": {"node_ids": ["d502eba6-5c29-40eb-aecd-bb6aa08fa982"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c251b1e5-21d4-4925-bd40-67ffff3489f9": {"node_ids": ["a365afb9-3340-4aaa-8f60-d64b18e3e402"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f06861a2-a831-490e-826f-02f005f04700": {"node_ids": ["666427f9-f933-47c3-a868-3300a5c64914"], "metadata": {"file_path": "hvplot_docs/05-Dimensioned_Containers.md", "file_name": "05-Dimensioned_Containers.md", "file_type": null, "file_size": 9203, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cc308c70-6355-4301-ac47-a6962e476be3": {"node_ids": ["64c81fcf-c1fd-46cd-ad06-0929f59eb5e2"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "58c28e59-6928-460d-bc4a-02adc56a9b23": {"node_ids": ["87d4ed4a-ada6-48be-929d-cfd6c40d8343"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fd85052b-e1ab-411e-8555-a16a5604827d": {"node_ids": ["5784d0e8-4b3d-4bc1-a9d6-acca3b7bbb2d"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "93ae6eff-f6a6-415b-a497-72b804e2fdec": {"node_ids": ["b59f914e-c505-47a4-a290-9b6fc4acfc49"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "13d8a539-0029-4ede-8e47-bfb7ccec4bbb": {"node_ids": ["814d5b0c-7a84-464c-a847-fb22cf9f8e8d"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "3791729d-7890-4ac6-a98b-ca248b038385": {"node_ids": ["3aeeb348-4247-4534-befa-72038d6bcb29"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e1458af2-3709-4942-acfc-680ff5e44b6f": {"node_ids": ["e5a6426c-1f3a-4d2a-a81f-f00866437b28"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7e0887e8-50d7-46b0-a480-f7426d3863e5": {"node_ids": ["88104dac-6a3b-4fc0-9eef-5d510d584237"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f1263a5e-890a-4100-8f67-b12c3efccc51": {"node_ids": ["0c4a2342-479f-46b4-bde4-56bcb149b48c"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5e63e422-c989-4f07-8f3c-b148be20ed40": {"node_ids": ["95a39dd7-9d13-4c39-ada8-2c9610b4261e"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "29303cba-da57-46fa-ba55-e1623b30caad": {"node_ids": ["9d17076c-a831-4e87-8be2-ac8b3805a38a"], "metadata": {"file_path": "hvplot_docs/06-Building_Composite_Objects.md", "file_name": "06-Building_Composite_Objects.md", "file_type": null, "file_size": 10847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "bb55b7f4-789b-46b6-8856-fb7370234033": {"node_ids": ["52a814d4-9169-4c47-9666-3d79e48b48a5"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7fe21dc9-e6d5-4e99-859c-c1905abb7a79": {"node_ids": ["77b1262e-7840-4e1e-8ea7-e1c8b7e9aea0"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0b2c6fb9-d4cb-4bbc-a903-350bdd7045c0": {"node_ids": ["38093699-77f7-47b6-93a6-6f6c9ac4544f"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "70b130f6-dc82-49fb-907b-341935bf5c2e": {"node_ids": ["12e1d014-d786-4c82-a345-f9db135e7967"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "914a7db0-a0e1-483c-88ee-8a7aee656d0e": {"node_ids": ["386b6e92-448d-4ceb-8990-86201dc75b9d"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "bfa5ef2a-379d-4bec-a437-e9ac29646a80": {"node_ids": ["6c3d2a5a-dd55-4fc8-b98e-e08598c20ca5"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6edca6c1-87cb-4ee2-a4a8-bda516e35ce1": {"node_ids": ["0f1b6160-9703-4898-a3ef-176b80dbb896"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "12f33b98-2bfe-4e5e-b123-ea8272746dcc": {"node_ids": ["2fb83456-8df8-4882-9bd4-08245e5e5d5b"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "bd08e15d-804f-465f-b4cd-806dca9b2bca": {"node_ids": ["9b40ba06-31ee-41e8-9c3c-b67daf68a00d"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8d830914-60ef-47f3-aa87-0b7d1b029025": {"node_ids": ["75616307-f5e1-44c5-bf6c-6318704c06f6"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "060a2418-dad9-4b37-8279-d324b4ba6f80": {"node_ids": ["49ea73da-303c-4ce3-ac38-18b3cccb66e1"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7682e8a6-c8d1-406c-a8b4-36dc53f39d58": {"node_ids": ["6ca37e5e-cb64-4751-b2da-e66e6f5f7630"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0930e77b-9427-473d-8819-466323f57143": {"node_ids": ["df76fd31-5a31-4f9a-8930-88861233d3cc"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a2ecfa92-cf7b-4721-bfe3-06c19ebdec14": {"node_ids": ["0d2f5075-2c3b-4dd7-b6d9-19beae5669ff"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5312dda3-3869-4e2a-9abd-2131b816d2cd": {"node_ids": ["e1e22611-7d27-4b21-bb9a-36e11943f60a"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7a3bb692-f7e7-467d-a9ad-fe42d98cd712": {"node_ids": ["dd8249e6-c0d9-435b-80eb-af3c2bd28408"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fc8e90b6-06f4-4047-b6bd-9ab4705bd244": {"node_ids": ["f96e1603-61d3-421a-953f-d582611bdc89"], "metadata": {"file_path": "hvplot_docs/07-Live_Data.md", "file_name": "07-Live_Data.md", "file_type": null, "file_size": 22034, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9f90f7f1-0d8b-4088-91dc-3e68ccff5622": {"node_ids": ["e38787cd-ee60-453c-bb38-12a77dd1708e"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6e482ac6-d8c9-47b3-95ca-e886b8d498b5": {"node_ids": ["b1ec5408-445b-4a27-9b70-4bf29bf0eada"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0f77421b-efd3-42e8-a96e-1d9e30ff74d8": {"node_ids": ["d6c2e551-3f70-4782-8e20-c4d5af38969e"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2900fc6b-6ddb-4643-8923-87144ed6eedb": {"node_ids": ["1f2e9b1f-5001-4eef-b383-bdf2ef454fc0"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "889efd32-d2be-4293-b2a4-06af2505e9ba": {"node_ids": ["1b9abdd3-f6b6-40de-817d-f52c67f42126"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e2f650f3-0d70-4bb4-9c46-0d04e642c7db": {"node_ids": ["6932aead-354c-4715-b023-fca91d4a6a63"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "626679c0-eb2c-4389-9387-ad10078f3d95": {"node_ids": ["31dd5e40-5902-4866-aafa-77c22717005b"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2aad0690-5a03-449e-ab48-daac4e42bb5a": {"node_ids": ["e9cea5b8-8cb2-434c-b701-2ce2c792aabd"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0953a5cc-560b-47d8-8337-53a63204b61a": {"node_ids": ["c615f9ad-ca69-4382-927c-b270bd16db79"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6840f554-4171-4595-aaa5-60664e1a4ceb": {"node_ids": ["a795711d-5e67-4789-82b3-509baf35182a"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "71cd0a7d-ca07-4319-b19a-c4d931ef207a": {"node_ids": ["a83ae3cf-4869-476e-880e-c0e44ce6286d"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ea69e197-a5a4-4971-968d-62371a4565f3": {"node_ids": ["8437c0b5-9eeb-4603-b1c0-061256085eb1"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f865eb54-6f87-446f-96d4-3c4259ac8d79": {"node_ids": ["9e171ae4-fe23-4431-871f-1997cb5317dc"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "31e2ad1a-3ced-4fbc-913b-49bcb7e1a405": {"node_ids": ["dd4c1df9-5029-421e-8ff6-21b9699c21b2"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "faed368e-b4ef-470f-b89a-9049079c05e8": {"node_ids": ["fc72eb5d-d4c7-4134-9379-b3fd5d4e45aa"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6aac926c-ad7d-4f01-9b34-3ab974199883": {"node_ids": ["633c6a57-9679-4ab7-b7af-a5abbff997f4"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9935cfd7-d3ca-4c1e-9943-52bbb1599070": {"node_ids": ["f24f683e-66c4-40c1-9416-e284bd8a4b75"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "626860fd-a698-4a2d-87ed-da47d6821f2c": {"node_ids": ["913cb1fe-36dd-44c3-acaa-b6d4dda3d07a"], "metadata": {"file_path": "hvplot_docs/08-Tabular_Datasets.md", "file_name": "08-Tabular_Datasets.md", "file_type": null, "file_size": 13996, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "39b1b238-a91c-47e9-9c35-769c3b189c16": {"node_ids": ["fbf0b662-c1d1-4b07-b8d4-a9f6a075779e"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e6783d1e-565f-408f-b9c0-2cbb68f1374a": {"node_ids": ["1f9dc12d-fa44-49af-9b99-5cf57f47c924"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1146429a-022b-45c2-b96e-8499e10daee2": {"node_ids": ["f30f09a7-e051-411d-bc6a-91ca72822a1c"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "47f96e77-060e-436b-b2f1-d8a9f59674e1": {"node_ids": ["6e8bfebc-f06c-4ed9-b6de-ae7a83867d15"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "62b1dba4-bd56-426c-94e3-5159644a427f": {"node_ids": ["5c261265-2721-4e94-a133-800fb9d46cfd"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4f7fcdd8-9a80-448d-8426-1ebb3af79986": {"node_ids": ["7c47ae9e-8f29-4b0b-9914-084816ff95d9"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6760058b-0b76-4bd8-a06f-577e41121c93": {"node_ids": ["803c5cd4-5912-4a9e-937d-c3a14736df39"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ebe7e6da-b8a4-491e-9ec4-e4c8044c91e4": {"node_ids": ["a3bca419-b6a0-4b14-b246-39502a33cc1b"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2f8deaa1-1e14-43ca-b94c-f9247f547292": {"node_ids": ["2c3361b7-d869-49b2-945e-3b8ea26eb316"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "df09742c-833c-49a7-bd14-2d96c4617f8c": {"node_ids": ["43dd7d3e-a561-4388-8269-51ae14d41b05"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a5a1dd76-29e5-43ae-b82d-5b440a900663": {"node_ids": ["e3f2e6d1-8381-4431-81d4-e6f9ec056201"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "bfa9bff3-0f18-4aa5-87a4-12094a1a457c": {"node_ids": ["696a6435-8a70-4494-a583-2350c822b732"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ac58fbdd-8350-4af4-9c9c-91cf6f9ff526": {"node_ids": ["ab8d5527-d13e-40c5-8f8c-92d5bca3db58"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "10e43059-88b0-415f-a932-baafad83601a": {"node_ids": ["846f532b-76a8-4a96-991d-c5f2826b4941"], "metadata": {"file_path": "hvplot_docs/09-Gridded_Datasets.md", "file_name": "09-Gridded_Datasets.md", "file_type": null, "file_size": 13300, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "763c41dc-2c69-478d-9c5a-98055a597c20": {"node_ids": ["c79944a0-2a07-4605-981a-cfeb5001a357"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fb2ca3f1-ce69-4098-8f6b-3390059ab252": {"node_ids": ["b75dfd7c-896b-4847-b6da-f9c599a27c84"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9ddcc535-6c13-4ae9-8669-18a01233c95e": {"node_ids": ["f79444b6-f6bd-4ebd-942c-5c2ddd12fb9a"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6050b290-2e20-40d9-a0db-e720b77d77af": {"node_ids": ["96db5a8e-9fb0-489c-9856-6e3dbace9925"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d0ecde18-8418-4bcf-886a-fcc974c84640": {"node_ids": ["c25c582b-8b7d-45db-b815-111780cf1b1c"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "597efb37-4796-4536-aef9-ba194f78bcbc": {"node_ids": ["d3e75648-c536-4bc7-996a-82a9211916e6"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "44c217a2-f8f7-4f53-92df-72bce3888c58": {"node_ids": ["2d93049a-6d79-47ea-b20f-4020e851ee0d"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2a6554a7-ed4e-47a2-bb03-ab150264a69c": {"node_ids": ["3ce92a65-0eb6-4aa0-8469-2ef1773b2044"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2ca973ca-38e8-467d-ab50-d4956c09de49": {"node_ids": ["85a2aeeb-5bc5-4c5b-ab17-f43e70425bf0"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "368a37ae-0d5f-4de8-b8dc-bd2fd255311f": {"node_ids": ["e004ddba-9ab9-45da-a825-571360f2a216"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "34092c52-c063-432c-968c-948778f461c8": {"node_ids": ["97339eb5-72a6-4888-a277-f3ea18b36bfa"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cd5ccd72-8189-47a0-9ac7-29014ec7d2f6": {"node_ids": ["242b2d69-ebad-4db9-83c9-4332f5e3f3ce"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "12074480-b400-42d2-9b56-f2ce4b92d41f": {"node_ids": ["fa317e36-a812-470b-95bd-4c4594759838"], "metadata": {"file_path": "hvplot_docs/10-Indexing_and_Selecting_Data.md", "file_name": "10-Indexing_and_Selecting_Data.md", "file_type": null, "file_size": 12386, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ba4d0f4e-e3d7-4476-a795-37cc7604d458": {"node_ids": ["cfa32fdb-5bc0-4360-abbc-d5b3df9cde8d"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0e9b7caa-8be3-4887-ba8c-feb0b3a6d665": {"node_ids": ["85af42d2-79d1-484d-9f25-4b75bd0f421a"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2bfc3d48-83d4-4752-94f4-8bd3881c7439": {"node_ids": ["d378bfe4-5984-487a-af16-7f99e95c29a5"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "501451b7-5d19-4b29-8f0c-6b4c20eb8593": {"node_ids": ["64fd54be-1871-4f2a-a7ad-e83b0ca44d02"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "48d6c511-65da-43f0-a9dd-ea3c450ce041": {"node_ids": ["6e56c5ed-f689-4e9e-9d59-ae06d5cb28c6"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1ade6589-10be-4a3a-b3e8-c4bba274101d": {"node_ids": ["f82f447d-abfa-4971-8162-94a11435575a"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "58555620-2c7a-4d0e-95ad-e8d46735fd6d": {"node_ids": ["7c78b9a7-9957-489e-90de-1eed2e1164bc"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "aa9bf5e0-05c5-4055-95d9-742ece533aaf": {"node_ids": ["c10adae8-2e37-4207-b2b4-ab9e949c2a9f"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d8be5c6e-59eb-472a-bce6-d22faa2505bc": {"node_ids": ["c093751f-6253-4a61-8b39-deaea5f11465"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "89184dac-c148-4671-bf68-98842ad11dbd": {"node_ids": ["7344e895-d677-40b0-b4d1-4b85f46d3b8e"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7e048583-ed11-4d88-8e2b-30a22fb80bf3": {"node_ids": ["4563b291-a089-44dc-871a-7c12e1c77dc0"], "metadata": {"file_path": "hvplot_docs/11-Transforming_Elements.md", "file_name": "11-Transforming_Elements.md", "file_type": null, "file_size": 21156, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "faf2afa8-b152-40bc-ba0b-007ad057a901": {"node_ids": ["39654ea7-b350-4a30-bf8f-a2b38ce85b15"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "aad6b8e2-b5ab-4f58-983c-0f562a8bcfc0": {"node_ids": ["8b1a435c-43f9-4e5c-bb88-bb5f8de561f5"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "795fd61d-af80-411d-879a-abb57dd81e71": {"node_ids": ["ddd25ed3-9683-4f07-837e-ba602b42ca6d"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ded80b12-92c4-4a5d-878c-b05f96d980cd": {"node_ids": ["4bbab617-30c9-42a5-9097-487e1a6e74fb"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c142769f-bb82-4206-a3a4-1908c070f74c": {"node_ids": ["f496a2eb-6b5e-410c-99d4-eedf04db5575"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "45bea28a-d560-4a2d-b916-444cf707970a": {"node_ids": ["ff779f07-7b3d-453e-b941-eb946bdbfc73"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "da519065-154d-46db-b57f-8c3609ed6810": {"node_ids": ["d84caa3a-69d8-48d8-bd61-66a725103d75"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "50fa7e76-af6b-4fdc-bb32-9ed21fe55dee": {"node_ids": ["2ad531e9-c850-487b-abdd-a858fafbdb1d"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "35214eb7-8eed-4ac7-b8b2-737df1685244": {"node_ids": ["dcc38ca1-d6ef-4655-99df-05484a6c9906"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "608f1986-8e83-4a8c-83b4-5550d4afd4d9": {"node_ids": ["e5408e1f-986e-4abd-907a-ac9d683b6174"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fb8b67c6-88ff-4dde-b79c-580338f961df": {"node_ids": ["c91893ee-bc0d-49a0-96a1-aa5e16a9aa2c"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cddc66bf-3755-4727-a02e-61aa52221b90": {"node_ids": ["6db6f5d0-40e3-42fc-bb82-8f2d09385f7b"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "676ebbd5-7424-4d03-87a9-4b24e99a191b": {"node_ids": ["4d506c40-8d32-4f33-aa0f-cf207601dd4f"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e9a75e81-75f0-4dc0-8c5e-aee639a1fcad": {"node_ids": ["67cd877b-ca57-4410-9cb0-a411524f5b04"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a68497c3-64c2-4778-91d1-44215e615185": {"node_ids": ["4dc564c7-2902-4e59-ae85-143f97e3ad46"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "3e8565b2-c9b6-4f81-9fbe-3b02f82fc234": {"node_ids": ["dc32cfeb-5248-41eb-b737-6879758eee2e"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "585361d9-185f-4d53-ad7b-ad57c5802c85": {"node_ids": ["efb95120-200c-4d31-a97d-0a6610870284"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d615ceef-2f4b-4971-84f3-9aeb9c07b69d": {"node_ids": ["c230eac4-a7c1-4b3d-bdbf-e2aa8f28adea"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "753fafbe-fe23-43fb-89c4-b28f937a2626": {"node_ids": ["74b33b46-b867-4165-a6ac-e7f0d3cfde05"], "metadata": {"file_path": "hvplot_docs/12-Responding_to_Events.md", "file_name": "12-Responding_to_Events.md", "file_type": null, "file_size": 24473, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c58274f9-ba38-4a50-b6a1-68f288fb14e0": {"node_ids": ["58859ee9-b27d-435d-95ff-03de0553343b"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "36cd84b9-a384-472d-83bd-a5009aecf5bf": {"node_ids": ["4be166aa-d5ad-4d70-9716-9471e2547989"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "77baf678-09a5-4f6d-907a-5d0289569396": {"node_ids": ["588a16c0-2e88-4e67-91e5-c6a298ad91db"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7f32b640-e9ef-426f-96de-6c53e287fab8": {"node_ids": ["79e07440-d7c7-4d70-8440-c57d388d50de"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b74c3f8f-e15b-4e1d-8cf0-c054c3c9e0cf": {"node_ids": ["f65b5e5f-092f-4d4b-b849-39b9a3758d02"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "00c85756-398e-4514-b35d-229ea2e0178b": {"node_ids": ["1cc288b8-24c3-4c7d-8f26-c047a89c04d8"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f95ab15d-b4e4-41c8-897d-ed29cb5712d2": {"node_ids": ["d15ad201-d382-4c47-a0aa-e0761402f818"], "metadata": {"file_path": "hvplot_docs/13-Custom_Interactivity.md", "file_name": "13-Custom_Interactivity.md", "file_type": null, "file_size": 12599, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ab863388-004f-43ba-a8c8-027f3a904982": {"node_ids": ["0614a1a0-c704-471a-b663-1da68cd37369"], "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8c0cd4b0-dcdc-4fff-8fb0-8807bcda1c56": {"node_ids": ["aaa38d44-3bd5-4bec-96ec-93ccebea64f1"], "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c4398f28-d639-4bbf-a737-f8e1fabf3609": {"node_ids": ["69bf15d2-bee4-4836-9e9a-134509aa9698"], "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "51a580f1-c5be-4fcc-bc48-212752d8424a": {"node_ids": ["d4d5b99b-f71c-4fac-ae6f-d4da0ec60e49"], "metadata": {"file_path": "hvplot_docs/14-Data_Pipelines.md", "file_name": "14-Data_Pipelines.md", "file_type": null, "file_size": 7165, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e9e49085-8a8d-4bb9-b113-0abf9c9e505f": {"node_ids": ["f6bfd598-0c1c-46dc-bafe-0499654f6b7e"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "502f45bc-e4e1-48bb-9732-56fb3d60e85d": {"node_ids": ["7233ef67-d7ea-4aba-8add-5ff7fdced4bb"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "08e7225c-b7f6-429c-84db-af6849a727b7": {"node_ids": ["00802514-5b0c-4512-8b18-eb0c126c53f4", "e318d8be-0ca4-465d-a4b1-ccf07183f01b"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "72d0f21a-ccb6-40ff-badc-13c2e3ea8593": {"node_ids": ["c1b5fa23-2bc1-48fa-97fb-f2f63257a98c"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0820d5e3-caf3-404b-a1d3-8f65c2099c4f": {"node_ids": ["7d035ae3-f134-47cb-bc62-773a847eec70"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "420c75bb-7740-4da1-a112-c2065658e5be": {"node_ids": ["6d9ac7d8-f57a-410f-b248-0709b0f71014", "fcbc1f0e-0cf7-4003-87e1-8f0916b78e5b"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "63720f59-3cf7-47b4-95ee-24e8b5e1caae": {"node_ids": ["af618ba4-256c-40fc-a4e6-1db5d9567dc7"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5449c7a9-b3cd-4b7c-a1c7-a2aa227fbe03": {"node_ids": ["3123b027-a01b-4d29-89db-64a15d5dac10"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cb571722-6937-45ae-b819-2eedb2d797ca": {"node_ids": ["8e9b8ec8-0bf0-40e3-a001-bf0a490021b3"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f58188bd-0b82-400b-8891-553261a31bc2": {"node_ids": ["026a483e-4c1e-4523-91e8-856de90e8d8a"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "91d463a9-fd2c-44e9-bd1b-4d88f8599527": {"node_ids": ["fa00c477-6750-4dcb-ad03-b951ab8859d3"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "22cbba2f-b3b7-44a9-bf02-131c2f796290": {"node_ids": ["bb236bad-4be0-4547-af6c-1ff05d05b156"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "15165df8-7f27-4dfe-aa4c-f1f714746809": {"node_ids": ["a4c50c9c-77af-43ba-be31-377cab480847"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "adbd3cf2-bff3-45ce-a74a-d99627b7e497": {"node_ids": ["d378ee94-5968-461c-bd0b-bbe6c8149a40", "fdbd3f93-22cd-4f9f-8784-b70fcf177d37"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "12d29cff-4ce9-47b1-8fed-4c3f79929306": {"node_ids": ["dd504638-2fab-4fa8-bdb8-d2efccf871a8"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d59f6c63-0c66-4f1c-b76e-090a232c54b8": {"node_ids": ["56df7fea-b4b8-4ed8-8d8f-4233f2768bc2"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "885eb6a5-cb49-4570-965d-f6b58e0c0fe2": {"node_ids": ["a4ad58fa-56d8-4a18-b4c6-efa7661591c9"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "90cc1b54-f4bd-48e1-8a41-51ca9793e45a": {"node_ids": ["f93767b1-edf4-46f5-8582-b48ae030b7fe"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "660ee9aa-b5f6-4e85-b3c7-eac50414cf86": {"node_ids": ["bd69d87d-a665-4482-96e7-253d5b7043b5"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e8cc0203-f572-4d50-8bb9-97d9a246dfae": {"node_ids": ["960a400d-4c71-4ec5-aacd-4fbf83d9fc79"], "metadata": {"file_path": "hvplot_docs/15-Large_Data.md", "file_name": "15-Large_Data.md", "file_type": null, "file_size": 43875, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e890f3b4-5613-45cb-82d1-c55b0c04a968": {"node_ids": ["36bc9bdd-14cf-437c-b202-80bb294c0b85"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "507d2f32-d2b1-4fcc-b0bd-7b53ffb2970c": {"node_ids": ["e0ded539-ee3e-4e51-a1cc-f752db8e7289"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6a1e86a9-de6b-4069-8542-120f11210412": {"node_ids": ["ad2b92df-44f4-4b32-9452-9e2b5626c703"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "60c723ba-fed2-401a-bcf1-62bb55609cee": {"node_ids": ["489014bf-d915-4db9-9fd0-545bb7056f47"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "32f6e827-830c-4d6f-987e-c3dc65257bfd": {"node_ids": ["5173568c-25c4-4425-b4d4-ad7f7a0a9cc9"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "43977066-e126-4ed7-a320-b760ed17389d": {"node_ids": ["fe1c7718-9023-462a-a7a3-ff79ff08e185"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e0cc119f-5241-4982-a059-f6f6ad9e4665": {"node_ids": ["c856e5c5-504a-4bfe-8cda-e3d40dffc7bd"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5c8e909d-0d38-4262-b732-0c16f4ad2d7f": {"node_ids": ["d6a5f038-fba0-4770-8748-85c8de7ec4bf"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "02cbb9b8-4acc-4d55-9f29-fea85a947a02": {"node_ids": ["1338489e-8a26-4fac-8a57-3a7fd1ca0650"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a7d05f95-c684-40f8-859a-dc644a2ab29d": {"node_ids": ["f3ee7d54-040f-4427-8f53-5bf0fb5d1229"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1fbe57bb-23e0-49c6-9362-2d68df7fe784": {"node_ids": ["5274ffed-a9f6-4d1f-a161-280cb4c9326a"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6cad669e-e920-45b5-8ce2-3917f9cc3691": {"node_ids": ["f45c210e-8286-4064-9f4a-a97a9ef12a55"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "74c79f6f-ff44-46b2-bd87-fc295df69cd9": {"node_ids": ["f6983e53-3421-48b5-bb68-d9a756c6dbbe"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f953407a-08cb-4e59-8048-c6bc3a580953": {"node_ids": ["c50ea2b8-f5af-4221-97d4-57dfa82115f4"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "aa77a454-2c53-4417-a147-ad55d1e5db08": {"node_ids": ["721d54b5-45bc-4c27-b3fe-b6439b97a3e0"], "metadata": {"file_path": "hvplot_docs/16-Streaming_Data.md", "file_name": "16-Streaming_Data.md", "file_type": null, "file_size": 18245, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ccb80cc6-8a55-410a-b26b-b48cf26bca78": {"node_ids": ["274bc76e-b7aa-48a2-9498-5e9d76871546"], "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "eafb5b1e-534f-445e-b4cf-09b6d48fe65e": {"node_ids": ["b639ffab-daf0-4c33-a26a-f5064621925d"], "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4594f60c-55ef-4da1-9b9b-fe12b1d99028": {"node_ids": ["58cb5f0d-dca1-4451-8040-80f78d0cdeaf"], "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "200ad9b6-5418-4eec-9d82-d8e20e70e402": {"node_ids": ["d9261bc9-ddf4-4c06-ab2c-99aa0d95923b"], "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "70260c34-44e4-4545-80ad-50b57dd8f102": {"node_ids": ["6a62ae2b-406d-49c2-8b2a-970b2d47c2e7"], "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "235a6c84-fd2f-43b8-b058-779e43fc9d68": {"node_ids": ["e6525d9b-1add-4256-8229-9f9b0109fef2"], "metadata": {"file_path": "hvplot_docs/17-Dashboards.md", "file_name": "17-Dashboards.md", "file_type": null, "file_size": 9420, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "058d2500-1a16-41a9-b51f-9dc258ee821f": {"node_ids": ["cebd430f-8c87-4f4a-941b-e1006c882e0d"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c97853cc-fc84-4045-a112-260b6f167514": {"node_ids": ["3781e6b7-259d-49bb-9689-d6d70e00ad61"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9768d38e-9c7c-498a-ac56-bd3017c60eda": {"node_ids": ["3bef0c62-b25c-48a9-8ee1-f8a794b768b8"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "87969b43-049b-451a-a449-9b23bb7bc72a": {"node_ids": ["ffd47a37-e834-43a7-bd57-be0d73e9a9d0"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1d6ad802-6cab-453e-af3a-cfe845af50d7": {"node_ids": ["f5d13fbb-119f-4882-a80b-19dadc5c427e"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "148d2db6-3a89-4158-b0ea-690cdc899672": {"node_ids": ["591f8bff-af2e-4639-b122-68833e2e18af"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7b33f86b-fe47-4863-8115-9584903253c0": {"node_ids": ["2adbbe4b-7d1f-4212-a712-a31e64ab5a19"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ed5230b4-63f5-4837-9b0f-04bcbda52e63": {"node_ids": ["44ac06d5-c76e-4455-b1bf-ac1249be72b3"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fa42baf8-1ae5-418c-855e-a36d463371e1": {"node_ids": ["98a5e8d6-b5d8-4e82-aa79-7f4d9d0b86a8"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a4fe5449-4f7b-4dbe-999b-3265415d817a": {"node_ids": ["540075a1-9aac-41a9-9a3d-f146e22fe602"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f2337909-1244-4aa2-83bf-ef683badee97": {"node_ids": ["393e9142-e5be-4f8e-afdb-c34257c2337d"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2800c53a-abf6-4893-8930-42ecdefa6eb2": {"node_ids": ["12091986-7fda-43db-905e-67286280b78c"], "metadata": {"file_path": "hvplot_docs/Annotators.md", "file_name": "Annotators.md", "file_type": null, "file_size": 12011, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b79cb07a-468c-41f1-8c6d-e8ba9bdbf4f3": {"node_ids": ["158c5880-e03a-411d-89d8-b17e71158a9c"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1ba1020e-d908-42b5-962d-226b103deb22": {"node_ids": ["6b472920-55a2-4458-ae52-0bf3407a2377"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b7e81fbf-cbf2-4ebc-ae83-7bbbd66c18c1": {"node_ids": ["cdd29e47-f21a-444b-9e4d-e9804ea5efb1"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "eebacd36-d1ae-4211-a612-9b0c6e6e8402": {"node_ids": ["a115f74d-f191-4f5a-b148-c1d8ff606b6a"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "62f93347-c3f5-4bcd-a866-7d73c672aafd": {"node_ids": ["2670791c-f725-4655-95b3-491590872b2a"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f364989d-88f6-49f6-978a-2b06bb3ee521": {"node_ids": ["b0e568da-e6ea-4cbb-805f-7bc387dc42f8"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a83cec2c-741a-43b8-8226-74fb4ee60714": {"node_ids": ["731d71e5-5dca-448c-aa36-30c4b5c6538b"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d1af7bbc-e00d-43af-81bc-cca56fe53539": {"node_ids": ["6856ce5e-865e-475e-9a08-588760b38569"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "72045606-e6fa-4e45-8b18-c0e723483269": {"node_ids": ["df514b50-556c-45b8-94c7-e94287ae6fcb"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b960c6e2-d801-4396-b826-6bcf5877c7d6": {"node_ids": ["c21ec95d-dee9-4fd4-8f91-1fa89bb59779"], "metadata": {"file_path": "hvplot_docs/Colormaps.md", "file_name": "Colormaps.md", "file_type": null, "file_size": 14847, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b6285e2e-fbf5-4430-a77c-4c5ad18a7b82": {"node_ids": ["1397da04-9c35-4fbb-abbc-8e95a13d8fc6"], "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2ecc4df7-6d72-427c-8541-3a1740e2db96": {"node_ids": ["e161d825-90eb-473f-9deb-3a056084b7b2", "a5f65d4e-9325-4cd3-94b2-f249ccf2bc0c"], "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "386cfdfb-1bcd-4b6d-b434-1651b6271bbe": {"node_ids": ["e1b47384-115c-46fd-8afb-025f4185f5fd"], "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8b1ef82c-4171-4c79-b119-18fa8cb38fb6": {"node_ids": ["21ecd05b-d546-4f51-9942-de046fc52bf7"], "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "084e1766-7ca0-40ea-87f3-c407d18b6188": {"node_ids": ["54c37385-8def-45cc-ac78-721395df8c8f"], "metadata": {"file_path": "hvplot_docs/Continuous_Coordinates.md", "file_name": "Continuous_Coordinates.md", "file_type": null, "file_size": 11058, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "acd2d6c8-2b2c-421e-901e-7901e2ee9fb1": {"node_ids": ["4b7efb6d-3241-4d62-966a-03f8bcf34225"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "44c24618-40b3-4523-b4f6-b06b099f7a98": {"node_ids": ["c5df882c-96e6-4a40-a3df-6255e7414e16"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "982aff09-6e9d-449b-83d7-c176b56ecdb7": {"node_ids": ["858446b6-f48b-439d-a835-61be8c2e4bf5"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e23c03b7-b7df-456b-bde7-bdce4376f15b": {"node_ids": ["4904536a-c4ca-4e75-b91e-c11245aa1679"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "af2e357f-51be-4f64-8c27-5922ee44a625": {"node_ids": ["9d386391-5402-446c-9e5c-eb8d03f05de1"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "249c84da-2dcf-43bf-9f08-8d45146acc0d": {"node_ids": ["f46ade73-dba3-4f6c-b5f1-cfa9a2b9b48b"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "371ab62e-00d6-498a-b690-1428e8675da5": {"node_ids": ["8171e91f-2cbb-4030-8dc9-484c8f5d3d4e"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c4fb3c50-4e4c-4404-add0-a6a906ac1e07": {"node_ids": ["8579c206-bd39-4bc5-9d0b-547642b957cd"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "dce95373-dea3-496e-96fb-40302db73c2f": {"node_ids": ["91d96065-e559-4c05-8939-6aa595536421"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2adf137d-2160-4b72-8c56-a351d0ed5261": {"node_ids": ["17e1a5d4-d315-40cc-9f00-730237e2395c"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2f2188a1-6786-4ea4-8264-8caf70c3ecfe": {"node_ids": ["ccf7e343-5395-4bd9-bf90-ae98a2118bb5"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "23cc853e-5902-4f96-ab2b-64cd2b50c23c": {"node_ids": ["6952a03c-1a71-4b95-9c30-a37677f773b1"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d6876d80-a667-4d9b-9cd4-e1b8f83059aa": {"node_ids": ["845dc911-e7d5-4c12-a4f2-00d4496e7472"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4c3bd284-8395-4fbe-9945-3d2235a15ef9": {"node_ids": ["17ee0d31-abf4-4e9d-b7af-dd0808d25aee"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c7b518f1-9d5a-450b-93e3-ef139d868681": {"node_ids": ["c5a42640-72ca-48f0-8ff7-29e695e0b367"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e1560ab1-9ac0-442c-8429-1c8bde6cd676": {"node_ids": ["ccd709d2-0c5f-417e-8d57-5e4e61bce1c1"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "bb1c2868-95ab-4927-8d1e-0d39f19e92f3": {"node_ids": ["ffb0ac26-1f6c-4a3d-bc0c-8def840f21e8"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7c939eca-317c-4258-99cb-5c74a5659821": {"node_ids": ["50a01a9d-0866-4ac3-9f71-f569eaa8b8d9"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2dd3e5fc-c882-4447-9aa0-c2fd0ed465c2": {"node_ids": ["4b25ccfb-f003-40af-a990-17acd9e0ecde"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "767a1b8a-d0ec-40bc-aafc-23e7c71da3d9": {"node_ids": ["3ff8331c-b4dc-47ef-8d84-5ac60f0945b2"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "205cb9a7-19c5-4edf-9234-630f474f42f8": {"node_ids": ["53e9de49-8e96-4b11-806a-af29197e8818"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "6d2f1656-b98a-42ee-acda-300ab8a0f2b7": {"node_ids": ["6b0bdcf2-91b5-4eb6-a5d1-b963138c86b0"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "01f5f8e2-1f2e-47df-9cb8-c10a5f7be7fd": {"node_ids": ["db8e95ea-2d1f-42fb-9fc9-8aa281618e27"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "275c3805-a2b5-45fa-9e53-ceeedb461dbb": {"node_ids": ["3a2495f8-11bf-4407-af26-41ec58ae83ac"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2ac14eb3-fd15-4040-8bc9-8b361ba5f49c": {"node_ids": ["13124bd5-c264-4d1f-8060-996e3d03a581"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0d6633dd-c16d-4905-b269-2740811a85b6": {"node_ids": ["37841e7d-854e-4d4e-b656-688f7d7c45a4"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b4344d7c-1af4-4822-8ff6-d377692f14fd": {"node_ids": ["edd00660-4e4d-4306-856f-bb1ad543e8f0"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "dc96d952-3b21-4860-883f-572edde32940": {"node_ids": ["50bdbece-7d26-400b-a0eb-4c7156c174e1"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7bc3e66c-aa18-492a-89aa-b809432dd3fe": {"node_ids": ["2ce31f21-0010-4d52-9c25-9026cecb33a3"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8a2ad419-0210-4b79-8bc2-1a0113009712": {"node_ids": ["a7c3028e-979d-4ad8-bcb8-548f5b24b5a7"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5142cbcf-672a-4792-90f4-2bc3b1344651": {"node_ids": ["901feeb7-7a1e-4c6d-9355-8dccaac750f5"], "metadata": {"file_path": "hvplot_docs/Customizing_Plots.md", "file_name": "Customizing_Plots.md", "file_type": null, "file_size": 21489, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a26ecffd-a8c4-42ec-b47d-7988ecf68516": {"node_ids": ["e02992d1-b98a-4460-a3cb-89982d0a67ba"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "abdb1f43-a212-424a-8bd4-5f74f15b0a1f": {"node_ids": ["9a61f722-cb16-480c-9abb-f14269ee8cd3"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5f9fba4b-72aa-40d6-8206-36f011a41efb": {"node_ids": ["e3eeaef8-b938-4996-b0e9-0b0f7e38dbbc"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "3878b1fb-4eff-48d2-8652-bb6456f9c205": {"node_ids": ["a1fb4498-dfe4-4315-883b-46b3b71de77e"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5e664123-9dd0-48f2-af91-a6c5daf90610": {"node_ids": ["65418be6-d2c0-45d2-abae-9c63c7f5034c"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "70b3d11f-00fe-4050-85fc-cec9d32da8ea": {"node_ids": ["d10144a7-a310-4f59-afb2-3067d49abbeb"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "68def7e2-8124-4bf0-8426-c49bc63af5e7": {"node_ids": ["b0cc5c18-0d90-44d5-9821-ea5ea59911d2"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "eb9b478d-379b-48b2-a1be-2cb1d0004acb": {"node_ids": ["21abed0e-186e-4656-98b0-8ff3adacc9fa"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f40b78f9-b94e-4774-841d-77479410c0eb": {"node_ids": ["0f80ea8f-1128-43ff-84c7-793a00bf1fc5"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9e6acf41-80f0-4426-a035-6050fc4efdc9": {"node_ids": ["6a876c0f-ec47-42bf-b7b4-82239db4fb9e"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "3091e2fa-cdca-420f-b1e8-bdb8b7d72eda": {"node_ids": ["4156d059-1c70-43d5-9afc-ee865ef87133"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "33d8918f-b5e4-4267-b4e4-8175517a4814": {"node_ids": ["2ed95525-e3e2-456a-8316-71cc575f28e9"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d903a57b-ee67-4ff5-a3ea-ca7ea22050bb": {"node_ids": ["924efa74-9912-4bf1-a424-e7af30393bc9"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4e3553bb-af59-4673-a6b8-5cc60094e499": {"node_ids": ["577c1398-048e-49da-9027-3e3245e15ccf"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "45b0cfb4-07b8-4921-8293-f89216802a9e": {"node_ids": ["201021c9-f8ff-440d-bdd8-2003f3765eaa"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1c89d447-dd35-4074-b784-c20a07678a10": {"node_ids": ["26fbf0dc-91ba-485b-9589-edf3afa518c0"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ec29f24e-5c62-4dfc-8755-bfa9d3ba886e": {"node_ids": ["c88d8623-4857-4de6-9ccf-826395df9d2a"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "442f52e4-6725-41bd-822a-ebda60722cd4": {"node_ids": ["cf13fc4b-da75-40b3-ae52-18048a1e11f7"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d5cb8778-a09c-4a43-ba05-588042fbe0a3": {"node_ids": ["69e02dcb-137f-4d0c-8fc0-4ea885956f50"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e9a712eb-6ee9-49d0-8626-92545a16df90": {"node_ids": ["e8015ebd-465f-4496-aef6-5580aeecf4cf"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "516cec03-856f-4324-92db-05dfe7624163": {"node_ids": ["80edff1c-28f5-4414-b5b7-a4507e06838b"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e8c377f3-8948-4388-99a3-d02ffdd4edc8": {"node_ids": ["7c130334-5d53-4b12-a938-d967726c3966"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4ed55078-1df2-4b03-8507-3cf2d919d7f6": {"node_ids": ["0688bd15-2836-45df-a186-1c01e81d858d"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "02683cdf-83f2-4d90-820c-7e5afe0e45da": {"node_ids": ["b420acec-31a2-450d-8902-6f09708c48dd"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "911c4817-72fb-47d5-85f9-52976b3af99b": {"node_ids": ["52f4fdd0-066d-42ad-94f2-dc4a55076af8"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d157a39d-bfe2-42cd-b03e-94eb3da17585": {"node_ids": ["dd5c6664-7b57-414a-8c59-80b9b3c3b5e9"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "2a5c9090-68f7-429c-a843-e03b123a694a": {"node_ids": ["7fb1a34e-f7b9-4d69-a5dd-eaa6cd467222"], "metadata": {"file_path": "hvplot_docs/Deploying_Bokeh_Apps.md", "file_name": "Deploying_Bokeh_Apps.md", "file_type": null, "file_size": 21611, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "c77c752e-ecda-4b56-a703-e0a9b26b9610": {"node_ids": ["7e88ef78-c8ff-427a-b3c7-41420978148d"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1c581b1b-e52c-4e23-a083-eef141191e06": {"node_ids": ["d74d0661-8e21-4ee3-915c-f974bcc0b816"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "30852d49-caf9-4ac3-aeea-c3b26137b885": {"node_ids": ["b4dfdbba-d41f-49b8-a51a-02afd9440228"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a9b36b88-f1ef-42ec-95c2-73605b824ca3": {"node_ids": ["74ee1e11-b6b1-4b5a-8239-17499626bc00"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "649e3f70-4fb3-4a86-9d1d-050a2b9e3539": {"node_ids": ["5abad214-b107-47b9-b86d-97193765f4a5"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "38e4aff7-eb47-4788-8cc0-6fa17bdbb7f8": {"node_ids": ["e27d941c-1b61-4e04-b0e9-a5beb00e2d1f"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "203fa610-45d8-44b4-9494-a95695790a68": {"node_ids": ["61deba78-0591-4cfd-aeeb-e3fbd4c4a6f7"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8de69e31-7926-49e8-9ee0-21b42e632f57": {"node_ids": ["a04e6fe9-7488-42e9-b81a-e47557b725fa"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "69001c19-cdbb-48c5-91d5-960991512791": {"node_ids": ["ee0d49bf-d5eb-49c8-8283-b90a41fd5482"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8570d3d0-adf2-40f8-b7bf-cd50eab51139": {"node_ids": ["8f9b11a2-ef31-4cba-9363-f78a0130bc7c"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "dc74b21b-f5eb-4e9b-ae19-76e99d2f63da": {"node_ids": ["351de9da-d92b-4dff-9215-8fc8968b2b78"], "metadata": {"file_path": "hvplot_docs/Exporting_and_Archiving.md", "file_name": "Exporting_and_Archiving.md", "file_type": null, "file_size": 20394, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f1a6e385-1887-41e1-808d-b333e60d0f2e": {"node_ids": ["bec560f8-7972-4d4c-9c0c-de6365dfa02e"], "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7f3fdc35-bfb2-4491-a3cf-9637ed19b215": {"node_ids": ["670503c8-b147-47c9-9fac-b8951cbd7d29"], "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8baff44d-944e-4e85-b9df-618e0a55d396": {"node_ids": ["de7800ae-0f0a-4cc8-b7f6-7c476157a871"], "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "965eac7a-2f52-4f49-a08a-5bc4d2a0089e": {"node_ids": ["805f1f1b-f8cb-4105-9eec-852190e4e845"], "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8dc32287-c4ef-4821-bc7d-a578ddb160d0": {"node_ids": ["cdb797b1-9104-4748-be30-6d9e48d7185f"], "metadata": {"file_path": "hvplot_docs/Geometry_Data.md", "file_name": "Geometry_Data.md", "file_type": null, "file_size": 6988, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9f2c2cba-3177-44af-ba2f-56ceca941746": {"node_ids": ["fbce6df5-e270-4c01-828f-5db174cdb79a"], "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "60bf2fe4-7c0d-4369-b00c-713ab442f52e": {"node_ids": ["e6b009d0-9a61-481e-b393-dca2ce4921e4"], "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "97d474b4-12f5-490d-bc74-6a61071b595e": {"node_ids": ["2ef2e53a-8433-42d3-af2e-7992de34ca6e"], "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a3107bba-7963-481b-9eb6-96d7fc45d10f": {"node_ids": ["a0d53bc0-ef73-4e92-a8d2-dc785221156c"], "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "73b936e1-993e-4dcc-850e-d739c6459dfb": {"node_ids": ["fb2877c7-94e9-4f31-a07f-9582a27346e3"], "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "11a8b2ea-3717-40f0-8e7a-6f0e68e520c1": {"node_ids": ["b360c455-2ba0-4d2d-b2d2-7f13cd83abed"], "metadata": {"file_path": "hvplot_docs/Installing_and_Configuring.md", "file_name": "Installing_and_Configuring.md", "file_type": null, "file_size": 4453, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5e183b2c-b341-4b66-8e17-7c9523bea423": {"node_ids": ["bb51bdf6-c53c-429d-8f7f-a65eb14f752c"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ead739f4-fc9e-41c5-8b63-b63b79e218b8": {"node_ids": ["ead5e818-694f-44c1-869d-8b62ae120a72"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "09a020f7-4ede-4c80-b4a4-3462a8c32a69": {"node_ids": ["bbd3fad0-5b50-4035-9678-15261676dac2"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "47c4bf31-c2e2-4b0e-bf9f-c5a491aba4c2": {"node_ids": ["200ace01-3df2-46e7-93c7-208b1247382f", "0e63265e-2bbf-4647-9bcc-a6b63efddc2b", "efc5c2a2-33b7-4aa8-be6d-8bc03bda6603", "befa0904-1484-40fc-8492-c0955e015da3", "10d2a5d5-e6b6-45c9-8844-0ac8138f43dc", "af7d68c9-9e29-4c94-87a4-0f2606106785", "687104fc-7d3f-4057-bbc7-732b6264187e", "fe20a7cf-a703-4dd0-8ca2-cacd428a847c", "0050131e-16c0-45d1-aaaa-c219226e307a", "d6b874a1-1388-43ed-b1a0-4ca67856cb47", "b566240e-b337-4f97-adb2-9f20659a9a2a", "b329848d-6fe7-4037-8fd1-a67a4f510e0b", "737b8f51-1f8e-4461-b0d0-74bad119ae7b", "b3f2d1f0-94f0-4883-a26c-33a9c37334d1", "5038b34c-91c5-479c-a249-fd75c7c2c6c7", "24a58b37-742a-4307-a21d-d8f6fe324ef2", "b625f60a-97d9-4a42-badb-0134d888a125", "23840586-fd6d-47fe-b930-f61bc2fac8bd", "1019a3c4-58de-423b-8e3a-e8baca640a88"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d0f9e178-9328-44c9-a9c5-d30173afcb80": {"node_ids": ["bc3ce6f3-dbb8-42b5-8bcf-c4e256dc15e0"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8a83a624-cbd9-4e9a-8275-e8d1cdc2504d": {"node_ids": ["ca31436c-b4a7-4316-a6d4-97454ec2f601"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4ed417ee-24dc-4f43-9f4b-ddd540aa3c62": {"node_ids": ["1ea96c52-f39b-4aec-9827-7837ec0c25ba"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "f8601b34-a3f6-4aac-b2b7-bd0e28d39e2e": {"node_ids": ["a0ab8381-a7c1-4ed0-93f2-aecdf45d7f89"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "81d3317f-c85a-4438-870b-7fd6499f20be": {"node_ids": ["57cf304a-593e-498f-9f01-c78faf276b53"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "71885c22-edfa-4cab-a0b8-8ca79125148b": {"node_ids": ["2a4885e5-ca23-49a9-b91d-29b043580083", "3972507d-18dc-4150-9a9c-e5ee3a3371f2"], "metadata": {"file_path": "hvplot_docs/Linked_Brushing.md", "file_name": "Linked_Brushing.md", "file_type": null, "file_size": 106923, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d8a8e289-624d-40ed-ad2e-2f21a7800aab": {"node_ids": ["c2c8e238-3506-473d-ab04-a931d1372fac"], "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8e48d117-71ed-491a-9987-271177f52f8c": {"node_ids": ["bf10d376-9992-479a-8f68-43e6dfea5814", "ee11557b-001f-4916-9c66-b76ef1fe64c4"], "metadata": {"file_path": "hvplot_docs/Linking_Plots.md", "file_name": "Linking_Plots.md", "file_type": null, "file_size": 8697, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5a9f3b43-5472-4a23-9b0a-865bbc49e593": {"node_ids": ["99cf0334-81f8-4cb9-b9c4-b529b19753ff"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a32df565-ff56-472b-b469-3a66cf2346e7": {"node_ids": ["5baf8a14-3689-44b0-97fb-e351db6138dc"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "49b3803d-41d4-4a6a-ae18-6123bae2d7c1": {"node_ids": ["74425403-5af4-419c-bf6e-f872b166affa"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ceff711f-6c7e-4eaa-b6ca-a819d9d42274": {"node_ids": ["d19dd865-befb-44cb-a692-4f2f521826ab"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8b8fab11-bb3d-4846-b0d5-df95bbf64188": {"node_ids": ["2a8d9a09-2287-4ee3-97c9-69b78bcc0c73"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "3a37a87e-e2a6-4e52-bfae-fad329b62253": {"node_ids": ["d50b434a-b14c-4d7b-ab06-a817945c2e2a"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fd7a66a7-b736-4c0c-96fc-8fcb3f4e8daa": {"node_ids": ["0ccf524a-ada1-40b0-9c60-5a9dd9ca0c99"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a1cc418a-9dec-4010-af6d-682770c36972": {"node_ids": ["28c98e71-8f78-4ac2-adfe-2c73c26a142c"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fccb57dc-9085-4279-a6f6-fc4bc935357e": {"node_ids": ["a51314b8-f718-4c37-9ee0-71025ebb01f4"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "069d7ba2-5195-4fcf-b1d8-4ca6a67dc6be": {"node_ids": ["740cbbb1-7130-459b-aa8e-62b6eb2db6b5"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d38fe9e3-d538-44a8-9999-16d53fe55bba": {"node_ids": ["d2a6a890-fb12-4da5-b869-ab00dd5ce46c"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "34a461ca-98da-4bea-8f7f-b698d088db92": {"node_ids": ["359467a1-3a6a-4e06-99ac-9d1bd434e81b"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "dd9dea52-6cd7-4317-8b98-e66d85735fb3": {"node_ids": ["483909a3-d49b-4774-ba88-bf15adccc8a8"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b17daa08-698e-4c9f-98f8-d0bafa4a7a25": {"node_ids": ["a733b2cd-a4cf-4f6a-abbb-677bb60dce07"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "84ad9b7c-062b-4ad8-bacb-2d06649e5c43": {"node_ids": ["53679a8b-9da4-4388-8008-c91d62d019db"], "metadata": {"file_path": "hvplot_docs/Network_Graphs.md", "file_name": "Network_Graphs.md", "file_type": null, "file_size": 10206, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "55b00d03-f9db-4c38-b831-fdaad4382d05": {"node_ids": ["75dde58b-f15f-43c7-bee9-bcd8ece76e20"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e9744735-0bb2-44ca-b9be-86b6b83eb40f": {"node_ids": ["43944cff-97d7-4d3d-8b1c-e1b1f06b98b5"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b41a6341-0c2f-4240-8ff1-cc663ea4c3da": {"node_ids": ["3efa2c34-0fb3-4b38-b2da-8be179a9adac"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1421d3f5-72fd-4fbd-81bf-586ed9e01170": {"node_ids": ["a0ee8dd5-520e-4c08-9905-6b6e26ac70fb"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "bafdfb25-dd1a-4683-8fe6-46b06260fb6c": {"node_ids": ["7c1f43be-dee1-4cc2-b7be-e1f67991dada"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0d967f1b-e3d1-40d3-8e43-2f50fc2fa911": {"node_ids": ["d6d16aac-8d6a-4946-aff3-cdbd19772b80"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "1b9b7e67-e900-4c2e-9ad4-e3d64ae07978": {"node_ids": ["6721c8ca-49f1-4243-9f0f-706f9e8a1b65"], "metadata": {"file_path": "hvplot_docs/Notebook_Magics.md", "file_name": "Notebook_Magics.md", "file_type": null, "file_size": 7041, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "680ac102-b303-47a7-859a-575a2f5a7768": {"node_ids": ["984c2e74-7362-483a-831e-7323a0d3d530"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b5927433-e281-45c8-a0b6-322d8fc8d12a": {"node_ids": ["c5aafee5-6a33-4ae3-acfe-95c9f9f356d7"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "98f8ceeb-74d4-481d-8873-77630fbc6e2c": {"node_ids": ["4c9af740-6f11-4649-b263-a39fa98c313a"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9cde8e41-afa4-41e8-94c8-9a08dd63ed98": {"node_ids": ["25f7cda3-674d-4e97-aeeb-b37f44bd9ad3"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "22241a1b-1dd7-443e-b4fd-01deb167b9bf": {"node_ids": ["d0f72a88-0750-4886-bac2-706c0d5dcd89"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cae4b22a-3da0-4e1c-a38d-5af09b1767c4": {"node_ids": ["e958362a-3f02-45c6-b523-78fa1d7dae83"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "81187f97-2f18-4c89-b4f4-71dc5e4626f4": {"node_ids": ["43888279-3972-46bf-878a-c81df033fdbf"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "5d555947-5187-483d-b39d-4e7196a9a0b7": {"node_ids": ["8a0814d7-350c-4305-b369-4e3f83efe4b9"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0a79dbc9-ae9a-409d-94c1-3e2e2815242e": {"node_ids": ["51b325d9-5c35-439e-96f2-9752189fc8a6"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "01d004c6-72bb-40c1-9027-cba6150771ef": {"node_ids": ["66715a49-4571-4ac1-b9df-7f59cc6e1f6c"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fc632f57-8a8b-493b-8dd6-51a9ee0531d0": {"node_ids": ["0af23c4a-6450-4e55-b0d8-1f4930bb2132"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7e4efd93-738d-4d08-9d15-e21f4da4024f": {"node_ids": ["56ae71a9-0910-45b4-803d-22aada52b2a3"], "metadata": {"file_path": "hvplot_docs/Plots_and_Renderers.md", "file_name": "Plots_and_Renderers.md", "file_type": null, "file_size": 15371, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "aa65c548-98e0-46b0-8b51-41cf140cb22a": {"node_ids": ["1089916b-a354-4183-bef4-4bdff68cfd52"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a18406e6-031a-4eea-a622-1a8c68635e53": {"node_ids": ["c8ebff7a-612e-42f9-86cb-07a0809445f7"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0d0a39f3-3807-4b99-b75a-cc60dbb5c532": {"node_ids": ["8ceb67c1-83b6-4045-a019-ba859b8d0996"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "3bfce97d-2793-43cc-ac33-1c2186c9ce90": {"node_ids": ["ec6566dd-c689-4d8e-a612-c3d436497d0c"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "85c118a5-fda0-4a6e-9e1e-f91a24b1b343": {"node_ids": ["f467e52d-ca7e-44f0-9a6a-71c412d288a4"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "78f99c44-9df4-4d1b-b300-0a6097b616e0": {"node_ids": ["55870a1b-96cf-472e-b24e-51752903aeee"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "20d6ea59-895c-4346-8f32-1287c7edd597": {"node_ids": ["ae4e5e12-c6eb-41ed-8a56-e0ea732402dd"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0986dfa3-cb0e-4a25-8dde-060477424f7d": {"node_ids": ["8a096199-a981-4bfc-a46c-469f42b4e472"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "ee84bfc9-298e-4888-a90c-56f414080368": {"node_ids": ["c553789c-385e-41f7-90dd-ff3cc3ddb761"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d614e1af-3b7a-40b6-a458-6caff78059c5": {"node_ids": ["cdd01298-eca5-4c12-b853-63fe91edb3a6"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "cf462911-593f-43c8-8d16-eefecd7573a4": {"node_ids": ["e102e157-a711-4481-966a-9bf46c7290d8"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4d70853d-8305-4aab-9b57-d4f225d2ff3c": {"node_ids": ["5b07dfb1-4be9-4756-9412-87986d0a8d14"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "613fdbe9-48fa-41f7-ad2b-1ec746c3b5f2": {"node_ids": ["bfccf24c-8f6b-4c8a-bca9-bf4936af3f3b"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "8c415403-83cb-46a0-9100-adb46a5cefe8": {"node_ids": ["8a350eb6-56d2-4961-b178-af7f1b83c984"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "de12d501-d31f-4061-b714-9998c95b4347": {"node_ids": ["ef25f0fc-8f31-43a3-9d60-5e4e3451cfb1"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "4fe71221-fba0-414f-a43d-b6963c49b21b": {"node_ids": ["87801a5d-00b4-4797-9dc2-ce76531d3549"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "0d9e2ccd-9f8c-4af7-ad50-61e64905b415": {"node_ids": ["48fa2dcd-2723-4fc0-8e65-5091e71e00ab"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b16e0e6e-df64-4dbf-b2f3-618029aa7cf3": {"node_ids": ["80a4fdd4-29c2-4268-953e-311f96306bee"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b7ab3ceb-563c-4913-9464-4179fe848687": {"node_ids": ["afa7f8dc-1941-423d-b661-e117863bcd8f"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7408c28e-615f-4601-8770-be762f23a934": {"node_ids": ["efe94952-b0e1-4aca-83c9-2e9dcadad8be"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "fa224d56-8f1d-40c3-a7ee-63f70e65b5d8": {"node_ids": ["f0561b9e-2be3-4814-a2e1-a980bd9a590d"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "77a812ff-dd68-4700-afc9-5e591bcc95d8": {"node_ids": ["5760f215-dfce-4ef9-8b8e-f578a9e71355"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "24b0d051-5e56-4af0-b663-04178fd008aa": {"node_ids": ["45eddd57-37dd-4074-8186-317239ca08c6"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "a026c818-cec2-4271-a184-538f202b1587": {"node_ids": ["087b5862-ca70-4e63-bd4a-ed45884347b0"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7722b446-8976-43f2-91f5-30fe6c14a7cb": {"node_ids": ["4cbbc670-2b34-47fc-8ede-1a810936cfd5"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "50c71383-445f-476a-9e13-313051bb71f6": {"node_ids": ["cfc559de-ab39-4341-b488-7672dc17ddd2"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "7e76d3e2-ec80-47c6-b548-8057b2f7a0d1": {"node_ids": ["5a27f2de-e70f-4b35-a538-af6e3f6285fd"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Bokeh.md", "file_name": "Plotting_with_Bokeh.md", "file_type": null, "file_size": 24187, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "e06707f3-429c-4756-9acf-009249f34c31": {"node_ids": ["7b7a67c7-4d05-490f-9db8-c7ebc2e75ca9"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "293fb481-66fd-43a0-a9b1-239ccef84484": {"node_ids": ["a3dd2cd3-0092-466d-9e01-8cf9ca19dc6d"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "93148f7d-ab81-4775-9ecd-fe878379d8e0": {"node_ids": ["a8aed61a-6b49-417f-98bc-13706f0152d2"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "b4f2862f-a9ad-4c94-8737-2e7a049d87bc": {"node_ids": ["c1921b77-d928-4524-9ac2-4a2a7ca9a906"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "84658b36-c79b-4469-ac90-00490d4aa9be": {"node_ids": ["75e48af6-52c5-466b-9be1-c4414c4d3dca"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "d10ffb11-6f31-4e99-a55f-cfae9cf20e92": {"node_ids": ["fa73889b-0128-48e5-83ab-4cdf51227757"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "9c058290-79b4-44af-b517-d4454d585c7a": {"node_ids": ["e73d7424-6bef-41f2-a14a-2a58b8910b2a"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "928a1d11-0935-401b-bdb1-58fb2fc1ef99": {"node_ids": ["a5a300a4-e068-420a-9a32-c516d43be820"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "34d53bdf-a177-43b0-9b0a-582685b6d51e": {"node_ids": ["6766c844-4fdb-42dc-9416-eb8d22554a64"], "metadata": {"file_path": "hvplot_docs/Plotting_with_Matplotlib.md", "file_name": "Plotting_with_Matplotlib.md", "file_type": null, "file_size": 9521, "creation_date": "2024-01-12", "last_modified_date": "2024-01-12", "last_accessed_date": "2024-01-12"}}, "50d1950c-cc88-4265-94e0-7cfc604577a1": {"node_ids": ["96fb6cb1-3969-4d13-952c-f51d04272e1f", "be5a4eba-9ce2-434a-89c1-d536d8b9e163", "146d0616-b5d5-43f0-afcf-aa385ba1c15e"], "metadata": {"file_path": "hvplot_docs/kwargs.md", "file_name": "kwargs.md", "file_type": null, "file_size": 7686, "creation_date": "2024-01-11", "last_modified_date": "2024-01-11", "last_accessed_date": "2024-01-11"}}}}
\ No newline at end of file